Пример #1
0
        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();
            codedRpcStream = new CodedOutputStream(rpcStream, true);
            var request = new ConnectionRequest();

            request.Type       = Type.Rpc;
            request.ClientName = name;
            codedRpcStream.WriteLength(request.CalculateSize());
            request.WriteTo(codedRpcStream);
            codedRpcStream.Flush();
            int size     = ReadMessageData(rpcStream, ref responseBuffer);
            var response = ConnectionResponse.Parser.ParseFrom(new CodedInputStream(responseBuffer, 0, size));

            if (response.Status != ConnectionResponse.Types.Status.Ok)
            {
                throw new ConnectionException(response.Message);
            }

            if (streamPort != 0)
            {
                streamClient = new TcpClient();
                streamClient.Connect(address, streamPort);
                var streamStream = streamClient.GetStream();
                request                  = new ConnectionRequest();
                request.Type             = Type.Stream;
                request.ClientIdentifier = response.ClientIdentifier;
                var codedStreamStream = new CodedOutputStream(streamStream, true);
                codedStreamStream.WriteLength(request.CalculateSize());
                request.WriteTo(codedStreamStream);
                codedStreamStream.Flush();
                size     = ReadMessageData(streamStream, ref responseBuffer);
                response = ConnectionResponse.Parser.ParseFrom(new CodedInputStream(responseBuffer, 0, size));
                if (response.Status != ConnectionResponse.Types.Status.Ok)
                {
                    throw new ConnectionException(response.Message);
                }
                StreamManager = new StreamManager(this, streamClient);
            }

            Services.KRPC.Service.AddExceptionTypes(this);
        }