示例#1
0
        private void TcpServer_DatagramReceived(object sender, TcpDatagramReceivedEventArgs <byte[]> e)
        {
            if (e.Datagram != null && e.Datagram.Length > 0)
            {
                try
                {
                    var message = Encoding.UTF8.GetString(e.Datagram);
                    var request = Utils.Deserialize <RequestInfo>(message);
                    if (request.Handler == "Connect")
                    {
                        tcpServer.Send(e.TcpClient, request, "连接成功!");
                        return;
                    }

                    var logger     = new TcpServerLogger(rtbLog, request, tcpServer, e.TcpClient);
                    var ctxRequest = new RequestContext(logger);
                    ctxRequest.Request = request;

                    Utils.ExecuteAsync(ctxRequest, e1 =>
                    {
                        var ctx = e1.Argument as RequestContext;
                        if (ctx == null)
                        {
                            return;
                        }

                        var handler = RequestHandler.GetHandler(ctx);
                        if (handler == null)
                        {
                            ctx.Logger.WriteLog("不支持{0}的处理者!", ctx.Request.Handler);
                            return;
                        }

                        e1.Result = handler.Execute();
                    },
                                       e2 =>
                    {
                        if (e2.Result != null)
                        {
                            tcpServer.Send(e.TcpClient, Utils.Serialize(e2.Result));
                        }
                    });
                }
                catch (Exception ex)
                {
                    context.Logger.WriteLog("{0}接收异常,{1}", e.TcpClient.Client.RemoteEndPoint, ex.Message);
                }
            }
            Application.DoEvents();
        }
示例#2
0
    void Update()
    {
        List <TcpClientState> toProcess;

        lock (Lock) {
            toProcess = new List <TcpClientState> (inbox);
            inbox.Clear();
        }
        if (toProcess != null)
        {
            foreach (TcpClientState client in toProcess)
            {
                List <string> msgs = client.Prot.swap_msgs();
                msgs.ForEach(delegate(string msg) {
                    var sw = new Stopwatch();
                    sw.Start();
                    var t0          = sw.ElapsedMilliseconds;
                    string response = rpc.HandleMessage(msg);
                    var t1          = sw.ElapsedMilliseconds;
                    byte[] bytes    = prot.pack(response);
                    var t2          = sw.ElapsedMilliseconds;
                    server.Send(client.TcpClient, bytes);
                    var t3 = sw.ElapsedMilliseconds;
                    debugProfilingData ["handleRpcRequest"] = t1 - t0;
                    debugProfilingData ["packRpcResponse"]  = t2 - t1;
                });
            }
        }
    }
示例#3
0
    void Update()
    {
        foreach (TcpClientState client in inbox.Values)
        {
            List <string> msgs = client.Prot.swap_msgs();
            msgs.ForEach(delegate(string msg)
            {
                var sw = new Stopwatch();
                sw.Start();
                var t0          = sw.ElapsedMilliseconds;
                string response = rpc.HandleMessage(msg);
                var t1          = sw.ElapsedMilliseconds;
                byte[] bytes    = prot.pack(response);
                var t2          = sw.ElapsedMilliseconds;
                server.Send(client.TcpClient, bytes);
                var t3 = sw.ElapsedMilliseconds;
                debugProfilingData["handleRpcRequest"] = t1 - t0;
                debugProfilingData["packRpcResponse"]  = t2 - t1;
                TcpClientState internalClientToBeThrowAway;
                string tcpClientKey = client.TcpClient.Client.RemoteEndPoint.ToString();
                inbox.TryRemove(tcpClientKey, out internalClientToBeThrowAway);
            });
        }

        vr_support.PeekCommand();
    }
示例#4
0
 static void server_PlaintextReceived(object sender, TcpDatagramReceivedEventArgs <string> e)
 {
     if (e.Datagram != "Received")
     {
         Console.Write(string.Format("Client : {0} --> ", e.TcpClient.Client.RemoteEndPoint.ToString()));
         Console.WriteLine(string.Format("{0}", e.Datagram));
         server.Send(e.TcpClient, "Server has received you text : " + e.Datagram);
     }
 }
示例#5
0
 private void MsgSend(TcpClient _client, string _msg, bool _pauseFlag)
 {
     if (!_pauseFlag)
     {
         try
         {
             IPEndPoint ClientIP = (IPEndPoint)_client.Client.RemoteEndPoint;
             server.Send(_client, _msg);
             LogRefresh("服务器端 has sent messages to " + ipC.iPConfig[ClientIP.Address.ToString()] + ":", _msg, dic["测试命令模式"]);
         }
         catch (Exception ex)
         {
             log.Exception(ex);
             return;
         }
     }
     else
     {
         return;
     }
 }
示例#6
0
    public void KickOff()
    {
        var studentList = new List <StudentItem>(studentDic.Values);

        foreach (var item in studentList)
        {
            if (item.studentState != null)
            {
                tcpServer.Send(item.studentState, NetworkCommand.EXIT);
                //broadcaster.sendMessage(Command.EXIT);
                DeleteStudent(item.UserName);
            }
        }
    }
示例#7
0
        protected override void WriteLine(string message)
        {
            var rtbMessage = string.Format("{0:yy-MM-dd HH:mm:ss} {1}", DateTime.Now, message);

            if (!string.IsNullOrEmpty(message))
            {
                rtbLog.AppendText(rtbMessage);
                rtbLog.AppendText(Environment.NewLine);
            }

            if (tcpServer != null && !ServerWrite)
            {
                var info = ResponseInfo.Create(request, message);
                tcpServer.Send(tcpClient, Utils.Serialize(info));
            }

            System.Threading.Thread.Sleep(100);
        }
示例#8
0
        /// <summary>
        /// 服务器接受客户端消息时执行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e">接受数据参数-Tcpclient,byte[]</param>
        static void server_DatagramReceived(object sender, TcpDatagramReceivedEventArgs <byte[]> e)
        {
            //TODO
            int headData = DataHandleHelper.getHeadData(e.Datagram);

            byte[] receviceData = e.Datagram;
            string username;
            bool   isExist;
            int    battleCode;

            switch (headData)
            {
            case CommandParam.LOGIN_REQUEST:
                //登陆请求
                username = DataHandleHelper.getStringParam(receviceData);
                UserInfo userInfo = new UserInfo();
                isExist = ConectMySqldb.queryUserInfoByUserName(username, userInfo);
                if (isExist)
                {
                    if (onLineList.ContainsKey(e.TcpClient) || onLineList.ContainsValue(username))
                    {
                        userInfo = new UserInfo();    //已存在用户或客户端,返回空值
                    }
                    else
                    {
                        onLineList.Add(e.TcpClient, username);
                    }
                }
                else
                {
                    userInfo = new UserInfo();
                }
                //返回数据
                server.Send(e.TcpClient, userInfo, CommandParam.LOGIN_RETURN);
                break;

            case CommandParam.LOADING_REQUEST:
                //载入请求
                username = DataHandleHelper.getStringParam(receviceData);
                ReviewInfo reviewInfo = new ReviewInfo();
                isExist = ConectMySqldb.queryReviewInfoByUserName(username, reviewInfo);
                if (!isExist)
                {
                    reviewInfo = new ReviewInfo();    //不存在,返回空值
                }
                //返回数据
                server.Send(e.TcpClient, reviewInfo, CommandParam.LOAD_RETURN);
                break;

            case CommandParam.MATCH_REQUEST:
                //匹配请求

                MatchInfo matchInfo = new MatchInfo();
                if (linelist.Count == 0)
                {
                    linelist.Add(e.TcpClient);
                    matchInfo.isMatch    = 0;
                    matchInfo.battleCode = -1;
                }
                else if (linelist.Count == 1)
                {
                    if (linelist.Contains(e.TcpClient))
                    {
                        matchInfo.isMatch    = 0;
                        matchInfo.battleCode = -1;
                    }
                    else
                    {
                        TcpClient emeny = linelist.ElementAt(0);
                        linelist.Remove(emeny);    //移除第一个匹配的元素
                        TcpClient[] battle = new TcpClient[] { emeny, e.TcpClient };
                        battleList.Add(battle);
                        matchInfo.isMatch    = 1;
                        matchInfo.battleCode = battleList.IndexOf(battle);    //在对战列表的位置
                    }
                }
                else
                {
                    matchInfo.isMatch    = 0;
                    matchInfo.battleCode = -1;
                }
                //返回数据
                server.Send(e.TcpClient, matchInfo, CommandParam.MATCH_RETURN);
                break;

            case CommandParam.BATTLE_REQUEST:
                //战斗数据交换
                battleCode = DataHandleHelper.getIntParam(receviceData);
                BattleInfo battleInfo = new BattleInfo();
                battleInfo.ReadByBytes(receviceData);

                if (battleCode < 0)
                {
                    return;    //找不到战斗列表
                }
                else
                {
                    foreach (var p in battleList.ElementAt(battleCode))
                    {
                        if (p != e.TcpClient)
                        {
                            TcpClient target = p;
                            battleInfo.setBattelCode(battleCode);
                            server.Send(target, battleInfo, CommandParam.BATTLE_RETURN);
                        }
                    }
                }
                break;

            case CommandParam.UPDATE_REQUEST:
                //更新数据
                ReviewInfo updatereviewInfo = new ReviewInfo();
                updatereviewInfo.ReadByBytes(receviceData);
                UpdateInfo updateInfo = new UpdateInfo();
                bool       isUpdate   = ConectMySqldb.updateReviewInfo(updatereviewInfo);
                if (isUpdate)
                {
                    updateInfo.isUpdate = 1;
                }
                else
                {
                    updateInfo.isUpdate = 0;
                }
                //返回数据
                server.Send(e.TcpClient, updateInfo, CommandParam.UPDATE_RETURN);
                break;

            case CommandParam.FINSH_REQUEST:
                battleCode = DataHandleHelper.getIntParam(receviceData);
                if (battleList.ElementAt(battleCode) != null)
                {
                    battleList.RemoveAt(battleCode);
                }
                server.Send(e.TcpClient, "Gamerover");
                break;

            default:
                server.Send(e.TcpClient, "参数错误");
                break;
            }
        }