示例#1
0
    public void CreateRoomResult(Client client, byte[] datas)
    {
        CreateGameResult model_login;

        NetHelp.RecvData <CreateGameResult>(datas, out model_login);
        UnityEngine.Debug.Log("创建房间结果:" + model_login.RoomId);
    }
示例#2
0
    void Client_QueryRomme()
    {
        QueryRoomRequest model_query_room = new QueryRoomRequest();

        model_query_room.RoomId = "kkk";
        NetHelp.Send <QueryRoomRequest>(Op.Client.QueryRoom, model_query_room, Connection.Client.socket);
    }
示例#3
0
    void Client_JoinRomme(byte[]  roomid)
    {
        JoinRoomRequest model_join_room = new JoinRoomRequest();

        model_join_room.RoomId = roomid;
        NetHelp.Send <JoinRoomRequest>(Op.Client.JoinRoom, model_join_room, Connection.Client.socket);
    }
示例#4
0
    public void JoinRoom(Client client, byte[] datas)
    {
        ClientResult model_join_result;

        NetHelp.RecvData <ClientResult>(datas, out model_join_result);
        UnityEngine.Debug.Log("加入房间返回结果:" + model_join_result.Result);
    }
示例#5
0
    void Client_CreateRomme()
    {
        CreateGameRequest model_create_room = new CreateGameRequest();

        model_create_room.UserName = "******";
        NetHelp.Send <CreateGameRequest>(Op.Client.CreateRoom, model_create_room, Connection.Client.socket);
    }
示例#6
0
        public void Internal_ServerIdentifyR(BaseClient <LoginClientModel> client, byte[] datas)
        {
            RegisterResult result;

            NetHelp.RecvData <RegisterResult>(datas, out result);
            Log.WriteLine(LogLevel.Debug, "注册返回结果:{0}", result.Success);
            if (result.Success)
            {
                //client.State = ClientState.LoggedIn;
                ////发送服务器信息到登陆服务器
                //ChannelData info_model = new ChannelData();
                //info_model.ChannelServer = ChannelServer.Instance.Conf.Channel.ChannelServer;
                //info_model.ChannelName = ChannelServer.Instance.Conf.Channel.ChannelName;
                //info_model.ChannelHost = ChannelServer.Instance.Conf.Channel.ChannelHost;
                //info_model.ChannelPort = ChannelServer.Instance.Conf.Channel.ChannelPort;
                //info_model.cur = 0;
                //info_model.max = 10;
                //info_model.state = (int)ChannelState.Normal;
                //NetHelp.Send<ChannelData>(Op.Internal.ChannelStatus, info_model, client.Socket);
            }
            else
            {
                Log.Error("Server identification failed, check the password.");
                return;
            }
        }
示例#7
0
    public void LoginResult(Client client, byte[] datas)
    {
        ClientResult model_login;

        NetHelp.RecvData <ClientResult>(datas, out model_login);
        UnityEngine.Debug.Log("登陆返回结果:" + model_login.Result);
    }
示例#8
0
    void Client_ConnectOkEvent()
    {
        Debug.Log("ConnectOk");
        ClientLogin model_login = new ClientLogin();

        model_login.UserName = "******";
        model_login.Password = "******";
        NetHelp.Send <ClientLogin>(Op.Client.Login, model_login, Connection.Client.socket);
    }
示例#9
0
文件: Client.cs 项目: webconfig/Card
    private void OnReceive(IAsyncResult result)
    {
        try
        {
            int bytesReceived = this.socket.EndReceive(result);
            if (bytesReceived == 0)
            {
                this.State = ConnectionState.Disconnected;
                return;
            }
            //拷贝到缓存队列
            for (int i = 0; i < bytesReceived; i++)
            {
                AllDatas.Add(buffer[i]);
            }
            //===解析数据===
            int len = 0, command = 0;
            do
            {
                if (AllDatas.Count > 7)                       //最小的包应该有8个字节
                {
                    NetHelp.BytesToInt(AllDatas, 0, ref len); //读取消息体的长度
                    len += 4;
                    //读取消息体内容
                    if (len <= AllDatas.Count)
                    {
                        NetHelp.BytesToInt(AllDatas, 4, ref command);//操作命令
                        byte[] msgBytes = new byte[len - 8];
                        AllDatas.CopyTo(8, msgBytes, 0, msgBytes.Length);
                        AllDatas.RemoveRange(0, len);
                        Handlers.Handle(this, command, msgBytes);
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            } while (true);

            this.BeginReceive();
        }
        catch (SocketException ex)
        {
            Debug.LogException(ex);
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }
    }
示例#10
0
        public void ClientLogin(BaseClient <LoginClient> client, byte[] datas)
        {
            ClientLogin model_login;

            NetHelp.RecvData <ClientLogin>(datas, out model_login);
            Log.Debug("用户名:{0},密码:{1}", model_login.UserName, model_login.Password);

            ClientResult result = new ClientResult();

            result.Result = true;
            client.Send <ClientResult>(Op.Client.Login, result);
        }
示例#11
0
        public void Login(BaseClient <ClientData> client, byte[] datas)
        {
            ClientLogin model_login;

            NetHelp.RecvData <ClientLogin>(datas, out model_login);

            ClientResult result = new ClientResult();

            result.Result = true;
            client.Send <ClientResult>(Op.Client.Login, result);
            client.t          = new ClientData();
            client.t.playerId = Guid.NewGuid();
            Log.Debug("用户名:{0},密码:{1},playerId:{2}", model_login.UserName, model_login.Password, client.t.playerId.ToString());
        }
示例#12
0
    public void QueryRoom(Client client, byte[] datas)
    {
        QueryRoomResult model_query_result;

        NetHelp.RecvData <QueryRoomResult>(datas, out model_query_result);
        for (int i = 0; i < model_query_result.result.Count; i++)
        {
            UnityEngine.Debug.Log(string.Format("房间名:{0}", model_query_result.result[i].RoomName));
        }
        if (QueryEvent != null)
        {
            QueryEvent(model_query_result.result);
        }
    }
示例#13
0
        public async void CreateRoom(BaseClient <ClientData> client, byte[] datas)
        {
            CreateGameRequest model_create_room;

            NetHelp.RecvData <CreateGameRequest>(datas, out model_create_room);
            Log.Debug("用户名:{0},创建房间", model_create_room.UserName);


            var player  = GrainClient.GrainFactory.GetGrain <IPlayerGrain>(client.t.playerId);
            var game_id = await player.CreateGame();

            CreateGameResult result = new CreateGameResult();

            result.RoomId = game_id.ToString();
            client.Send <CreateGameResult>(Op.Client.CreateRoom, result);
        }
示例#14
0
        public async void JoinRoom(BaseClient <ClientData> client, byte[] datas)
        {
            JoinRoomRequest model_join_room;

            NetHelp.RecvData <JoinRoomRequest>(datas, out model_join_room);
            Guid RoooId = new Guid(model_join_room.RoomId);

            Log.Debug("房间id:{0}", RoooId.ToString());

            var       player = GrainClient.GrainFactory.GetGrain <IPlayerGrain>(client.t.playerId);
            GameState state  = await player.JoinGame(RoooId);

            ClientResult result = new ClientResult();

            result.Result = true;
            client.Send <ClientResult>(Op.Client.JoinRoom, result);
        }
示例#15
0
        public void Connect(Action <DeliveryConnection> onConneced)
        {
            try
            {
                //Logger.Info("[CL.DeliveryClient] Socket.Iocp,connecting... host:" + host + " port:" + port);

                //(x.1) Instantiates the endpoint and socket.
                var hostEndPoint = new IPEndPoint(NetHelp.ParseToIPAddress(host), port);
                var socket       = new global::System.Net.Sockets.Socket(hostEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);


                DeliveryConnection _conn = new DeliveryConnection();

                _conn.Conn_OnConnected = onConneced;

                var receiveEventArgs = _conn.receiveEventArgs = new SocketAsyncEventArgs();

                receiveEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);


                receiveEventArgs.UserToken = _conn;


                _conn.Init(socket);

                //var buff= DataPool.BytesGet(receiveBufferSize);
                var buff = new byte[receiveBufferSize];
                _conn.receiveEventArgs.SetBuffer(buff, 0, buff.Length);


                //(x.2)
                SocketAsyncEventArgs connectArgs = new SocketAsyncEventArgs();
                connectArgs.RemoteEndPoint = hostEndPoint;
                connectArgs.Completed     += new EventHandler <SocketAsyncEventArgs>(OnConnect);
                connectArgs.UserToken      = _conn;

                socket.ConnectAsync(connectArgs);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
示例#16
0
        public async void QueryRoom(BaseClient <ClientData> client, byte[] datas)
        {
            QueryRoomRequest model_query_room;

            NetHelp.RecvData <QueryRoomRequest>(datas, out model_query_room);
            Log.Debug("用户名:{0},查询房间", model_query_room.RoomId);

            var grain = GrainClient.GrainFactory.GetGrain <IPairingGrain>(0);

            PairingSummary[] kkk = await grain.GetGames();

            QueryRoomResult result = new QueryRoomResult();

            for (int i = 0; i < kkk.Length; i++)
            {
                QueryRoomResult.QueryRoomResultItem item = new QueryRoomResult.QueryRoomResultItem();
                item.RoomId   = kkk[i].GameId.ToByteArray();
                item.RoomName = kkk[i].Name;
                result.result.Add(item);
            }
            client.Send <QueryRoomResult>(Op.Client.QueryRoom, result);
        }
示例#17
0
        public bool Start()
        {
            Stop();

            try
            {
                //Logger.Info("[CL.DeliveryServer] Socket.Iocp,starting... host:" + host + " port:" + port);

                connMap.Clear();

                IPEndPoint localEndPoint = new IPEndPoint(String.IsNullOrEmpty(host)?IPAddress.Any: NetHelp.ParseToIPAddress(host), port);
                listenSocket = new global::System.Net.Sockets.Socket(localEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                listenSocket.Bind(localEndPoint);


                // start the server with a listen backlog of 100 connections
                listenSocket.Listen(maxConnectCount);
                // post accepts on the listening socket
                StartAccept(null);

                //Logger.Info("[CL.DeliveryServer] Socket.Iocp,started.");
                return(true);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            return(false);
        }
示例#18
0
        /// <summary>
        ///接收完成时处理函数
        /// </summary>
        /// <param name="e">与接收完成操作相关联的SocketAsyncEventArg对象</param>
        private void ProcessReceive()
        {
            // 检查远程主机是否关闭连接
            if (asyn.BytesTransferred > 0)
            {
                if (asyn.SocketError == SocketError.Success)
                {
                    //判断所有需接收的数据是否已经完成
                    if (socket.Available == 0)
                    {
                        //获取接收到的数据
                        //byte[] ByteArray = new byte[asyn.BytesTransferred];
                        //Array.Copy(asyn.Buffer, 0, ByteArray, 0, ByteArray.Length);

                        //拷贝到缓存队列
                        for (int i = 0; i < asyn.BytesTransferred; i++)
                        {
                            AllDatas.Add(asyn.Buffer[i]);
                        }
                        //===解析数据===
                        int len = 0, command = 0;
                        do
                        {
                            if (AllDatas.Count > 7)                       //最小的包应该有8个字节
                            {
                                NetHelp.BytesToInt(AllDatas, 0, ref len); //读取消息体的长度
                                len += 4;
                                //读取消息体内容
                                if (len <= AllDatas.Count)
                                {
                                    NetHelp.BytesToInt(AllDatas, 4, ref command);//操作命令
                                    byte[] msgBytes = new byte[len - 8];
                                    AllDatas.CopyTo(8, msgBytes, 0, msgBytes.Length);
                                    AllDatas.RemoveRange(0, len);
                                    Handle(this, command, msgBytes);
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else
                            {
                                break;
                            }
                        } while (true);
                    }
                    else if (!socket.ReceiveAsync(asyn))    //为接收下一段数据,投递接收请求,这个函数有可能同步完成,这时返回false,并且不会引发SocketAsyncEventArgs.Completed事件
                    {
                        // 同步接收时处理接收完成事件
                        this.ProcessReceive();
                    }
                }
                else
                {
                    this.ProcessError();
                }
            }
            else
            {
                CloseSocket(this);
            }
        }