blob: 73a8d51ab9e70837ba351e4a3cece78c853cdd8d [file] [log] [blame]
Chris Simpsona9b6c702018-04-08 07:11:37 -04001/*
2* Licensed to the Apache Software Foundation (ASF) under one
3* or more contributor license agreements. See the NOTICE file
4* distributed with this work for additional information
5* regarding copyright ownership. The ASF licenses this file
6* to you under the Apache License, Version 2.0 (the
7* "License"); you may not use this file except in compliance
8* with the License. You may obtain a copy of the License at
9*
10* http://www.apache.org/licenses/LICENSE-2.0
11*
12* Unless required by applicable law or agreed to in writing,
13* software distributed under the License is distributed on an
14* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15* KIND, either express or implied. See the License for the
16* specific language governing permissions and limitations
17* under the License.
18*/
19
20public class TMultiplexedProtocol<Protocol: TProtocol>: TWrappedProtocol<Protocol> {
21 public let separator = ":"
22
23 public var serviceName = ""
24
25 public convenience init(on transport: TTransport, serviceName: String) {
26 self.init(on: transport)
27 self.serviceName = serviceName
28 }
29
30 override public func writeMessageBegin(name: String,
31 type messageType: TMessageType,
32 sequenceID: Int32) throws {
33 switch messageType {
34 case .call, .oneway:
35 var serviceFunction = serviceName
36 serviceFunction += serviceName == "" ? "" : separator
37 serviceFunction += name
38 return try super.writeMessageBegin(name: serviceFunction,
39 type: messageType,
40 sequenceID: sequenceID)
41 default:
42 return try super.writeMessageBegin(name: name,
43 type: messageType,
44 sequenceID: sequenceID)
45 }
46 }
47}