private IEnumerator Start()
    {
        _client = FlexiSocket.Create("::1", 1366, Protocols.BodyLengthPrefix); //ipv6
        yield return(new WaitForSeconds(1));                                   // wait for server to startup since bot server and clients are in the same scene

        using (var connect = _client.ConnectAsync())
        {
            yield return(connect);

            if (!connect.IsSuccessful)
            {
                Debug.LogException(connect.Exception);
                yield break;
            }
            Debug.Log("Connected", this);
        }

        while (_client.IsConnected)
        {
            using (var receive = _client.ReceiveAsync())
            {
                yield return(receive);

                if (!receive.IsSuccessful)
                {
                    if (receive.Exception != null)
                    {
                        Debug.LogException(receive.Exception);
                    }
                    if (receive.Error != SocketError.Success)
                    {
                        Debug.LogError(receive.Error);
                    }
                    _client.Close();
                    yield break;
                }

                Debug.Log("Client received: " + Encoding.UTF8.GetString(receive.Data), this);
            }

            var send = _client.SendAsync("Hey I've got your message");
            yield return(send);

            if (!send.IsSuccessful)
            {
                if (send.Exception != null)
                {
                    Debug.LogException(send.Exception);
                }
                if (send.Error != SocketError.Success)
                {
                    Debug.LogError(send.Error);
                }
                _client.Close();
                yield break;
            }
            Debug.Log("Message sent", this);
            GameObject.CreatePrimitive(PrimitiveType.Cylinder);
        }
    }
Exemple #2
0
        private void Update()
        {
            ISocketClient socketClient = null;
            int           nCount       = m_SocketList.Count;

            for (int i = 0; i < nCount; ++i)
            {
                socketClient = m_SocketList[i];
                if (socketClient.CanClose())
                {
                    socketClient.Close();
                    m_SocketList.RemoveAt(i);
                    break;
                }
            }

            //推动socket client 更新
            if (null != m_CurrentSocketClient)
            {
                m_CurrentSocketClient.Update();
            }

            //处理解包
            ProccessMessage();
        }
        public void Close()
        {
            if (_socket == null)
            {
                return;
            }

            _socket.Close();
            _socket = null;
        }
Exemple #4
0
    private void OnDestroy()
    {
        mSocketClient.Close();
        mSocketClient = null;
        UnsubscribeEvent();

//		BluetoothLEHardwareInterface.DeInitialize (delegate {


//		});
    }
        /// <exception cref="ArgumentException"></exception>
        /// >
        /// <exception cref="SocketException"></exception>
        /// >
        public OperationResponseDto SendOperation(OperationDto operationDto)
        {
            //PRE-CONDITION
            //TODO LOGGING
            operationDto.Params.ToList()
            .ForEach(x => CodeContract.PreCondition <ArgumentException>(x >= 0 && x <= 65535));

            var paramBytes = new List <byte>();

            foreach (var param in operationDto.Params)
            {
                paramBytes.Add(GetDataType(param));
                paramBytes.AddRange(ValueToBytes(param));
            }

            var payload = new List <byte> {
                operationDto.Operation, operationDto.Device
            }.Concat(paramBytes).ToArray();

            try
            {
                _socketClient.Connect();
                _socketClient.Send(payload);
                var response = _socketClient.Recieve();

                //POST-CONDITIONS
                //TODO LOGGING
                CodeContract.PostCondition <SocketException>(
                    !response.SequenceEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }));
                CodeContract.PostCondition <ArgumentException>(response[1] > 0 && response[1] < 4);
                CodeContract.PostCondition <ArgumentException>(response[0] > 0);
                CodeContract.PostCondition <ArgumentException>(response.Length == 8);

                return(new OperationResponseDto
                {
                    Status = response[0],
                    Returns = BytesToValue(response.Skip(1).ToArray())
                });
            }
            finally
            {
                _socketClient.Close();
            }
        }
Exemple #6
0
 /// <summary>
 /// 解析数据并且传回
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="channel"></param>
 public static void AnalysisRequest <T>(NetChannel <T> channel)
 {
     //
     if (channel.recData == null)
     {
         return;
     }
     else
     {
         if (typeof(byte[]) == channel.recData.GetType())
         {
             object data = channel.recData;
             byte[] req  = (byte[])data;
             //说明是HTTP
             if (serviceHttp == null)
             {
                 serviceHttp = new ServiceHttpProcessor();
             }
             HttpRequest request = serviceHttp.ProcessRequestReturn(req);
             SrvRquest   srvReq  = null;
             object      result  = null;
             string      json    = null;
             if (request != null)
             {
                 srvReq = CreateSrvReq(request);
                 result = InvokeService(srvReq);
             }
             else
             {
                 json = "解析HTTP错误,无法获取请求的参数或者服务名称";
             }
             if (result != null)
             {
                 json = StreamSerializer.JSONObjectToString <object>(result);
             }
             int streamLen = 1000;
             if (!string.IsNullOrEmpty(json))
             {
                 streamLen = json.Length * 2;
             }
             StreamBuffer stream = HTTPStream.GetInstance().GetStreamCompare(streamLen);
             serviceHttp.ProcessResult(json, request, stream.Buffer);
             stream.ResetSize((int)stream.Buffer.Length);
             stream.ResetPostion();             //重置位置;
             int        len      = stream.Size; //数据长度
             byte[]     tmp      = null;
             ByteBuffer buffer   = null;
             int        position = 0;
             if (len < BufferManager.GetInstance().BufferSize)
             {
                 //取出缓存Buffer
                 buffer   = BufferManager.GetInstance().GetBufferNum(1)[0];
                 tmp      = buffer.buffer;
                 position = buffer.Position;
             }
             else
             {
                 tmp = new byte[len];
             }
             ISocketChannel socket = channel.channel as ISocketChannel;
             if (socket != null)
             {
                 stream.Buffer.Read(tmp, position, len);
                 socket.SendData(tmp, position, len);
                 socket.Close();
             }
             if (buffer != null)
             {
                 //释放取出的缓存
                 BufferManager.GetInstance().FreeBuffer(buffer);
             }
             HTTPStream.GetInstance().FreeBuffer(stream);
         }
         else
         {
             object    data   = channel.recData;
             SrvRquest req    = (SrvRquest)data;
             object    result = InvokeService(req);
             if (result != null)
             {
                 ISocketClient <T> socket = channel.channel as ISocketClient <T>;
                 if (socket != null)
                 {
                     socket.SendData(result);
                 }
                 socket.Close();
             }
         }
     }
 }
Exemple #7
0
 private void OnDestroy()
 {
     mClient.Close();
     mClient = null;
 }
 private void OnDestroy()
 {
     client.Close();
     client = null;
 }
 public void Close()
 {
     _socketClient.Close();
 }
Exemple #10
0
 public Task Stop()
 {
     _socketClient?.Close("关闭");
     return(Task.CompletedTask);
 }
Exemple #11
0
 public void Close()
 {
     Client.Close();
 }
 public void DisConnect()
 {
     mSocketClient.Close();
     mSocketClient.Disconnect();
 }
Exemple #13
0
        /// <summary>
        /// 连接指定的服务器。
        /// </summary>
        public bool Connect(Server server, AddressFamily addressFamily = AddressFamily.InterNetwork)
        {
            _networkAddressFamily = addressFamily;

            if (_socket != null)
            {
                _socket.Close();
                _socket = null;
            }

            if (server == Server.Null ||
                server == Server.CServer)
            {
                // 其他的服务器就不用连接了。
                return(false);
            }

            var hServerAddress = _hServerAddress.Read();
            var gServerAddress = _gServerAddress.Read();

            string host = "";
            int    port = 0;

            switch (server)
            {
            case Server.PServer:
                host = GetHost();
                port = GetPort();
                break;

            case Server.HServer:
                host = hServerAddress;
                port = 11122;
                break;

            case Server.GServer:

                if (gServerAddress == null)
                {
                    MyLog.ErrorWithFrame(
                        name,
                        string.Format("GameServer Address Error ")
                        );

                    return(false);
                }

                host = gServerAddress.Ip;
                port = gServerAddress.Port;
                break;

            default:
                break;
            }

            MyLog.InfoWithFrame(
                name,
                string.Format("Connect gate server: {0}:{1}",
                              host,
                              port)
                );

#if UNITY_IOS
            var ios = _context.GetIosSDK();

            if (addressFamily == AddressFamily.InterNetworkV6)
            {
                host = ios.GetIpV6(host);
                MyLog.InfoWithFrame(name, string.Format("convert to ipv6: {0}", host));
            }
#endif

            if (string.IsNullOrEmpty(host))
            {
                return(false);
            }

            var socketFactory = _context.GetSocketFactory();

            _socket = socketFactory.CreateSocket();
            return(_socket.Connect(host, port, server, addressFamily));
        }
Exemple #14
0
 public Task <bool> Close()
 {
     return(_client.Close());
 }