/// <summary> /// Connect to a kRPC server on the specified IP address and port numbers. If /// streamPort is 0, does not connect to the stream server. /// Passes an optional name to the server to identify the client (up to 32 bytes of UTF-8 encoded text). /// </summary> public Connection(string name = "", IPAddress address = null, int rpcPort = 50000, int streamPort = 50001) { if (address == null) { address = IPAddress.Loopback; } rpcClient = new TcpClient(); rpcClient.Connect(address, rpcPort); var rpcStream = rpcClient.GetStream(); rpcStream.Write(Encoder.rpcHelloMessage, 0, Encoder.rpcHelloMessage.Length); var clientName = Encoder.EncodeClientName(name); rpcStream.Write(clientName, 0, clientName.Length); var clientIdentifier = new byte[Encoder.clientIdentifierLength]; rpcStream.Read(clientIdentifier, 0, Encoder.clientIdentifierLength); if (streamPort == 0) { StreamManager = null; } else { StreamManager = new StreamManager(this, address, streamPort, clientIdentifier); } }
public Connection(string name = "", IPAddress address = null, int rpcPort = 50000, int streamPort = 50001) { if (address == null) { address = IPAddress.Loopback; } rpcClient = new TcpClient(); rpcClient.Connect(address, rpcPort); rpcStream = rpcClient.GetStream(); rpcStream.Write(Encoder.RPCHelloMessage, 0, Encoder.RPCHelloMessage.Length); var clientName = Encoder.EncodeClientName(name); rpcStream.Write(clientName, 0, clientName.Length); var clientIdentifier = new byte[Encoder.ClientIdentifierLength]; rpcStream.Read(clientIdentifier, 0, Encoder.ClientIdentifierLength); codedRpcStream = new CodedOutputStream(rpcStream, true); if (streamPort != 0) { streamClient = new TcpClient(); streamClient.Connect(address, streamPort); var streamStream = streamClient.GetStream(); streamStream.Write(Encoder.StreamHelloMessage, 0, Encoder.StreamHelloMessage.Length); streamStream.Write(clientIdentifier, 0, clientIdentifier.Length); var recvOkMessage = new byte [Encoder.OkMessage.Length]; streamStream.Read(recvOkMessage, 0, Encoder.OkMessage.Length); if (!recvOkMessage.SequenceEqual(Encoder.OkMessage)) { throw new InvalidOperationException("Did not receive OK message from server"); } StreamManager = new StreamManager(this, streamClient); } }