Example #1
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryRegist
        /// 作者:taixihuase
        /// 作用:通过请求的角色数据,尝试创建、记录一个新的角色数据并再次返回给客户端
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryRegist(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Regist a new account...");

            RegistInfo info = (RegistInfo)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.Regist]);

            UserCollection.UserReturn userReturn = peer.Server.Users.RegistUser(info);

            if (userReturn.ReturnCode == UserCollection.UserReturn.ReturnCodeType.Success)
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.Regist)
                {
                    ReturnCode = (short)ErrorCode.Ok,
                    DebugMessage = "账号创建成功!"
                };

                peer.SendOperationResponse(response, sendParameters);
            }
            else
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.Regist)
                {
                    ReturnCode = (short)ErrorCode.InvalidOperation,
                    DebugMessage = userReturn.DebugMessage.ToString()
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to regist " + info.Account + " Because of " +
                                     Enum.GetName(typeof(UserCollection.UserReturn.ReturnCodeType),
                                         userReturn.ReturnCode));
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            ServerPeer server = new ServerPeer();

            server.Start(2333, 10);
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            IPEndPoint superPeerEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8090);
            int        port = 8091;

            ServerPeer server = new ServerPeer(superPeerEndPoint, port);

            server.Run();

            ClientPeer client = new ClientPeer(superPeerEndPoint);

            client.Run();

            //used Task.Factory.StartNew(() and sleep to simulate that this tasks are performed on different applications/machines
            Task.Factory.StartNew(() => server.AllowConnection(client.GetPeerAddress()));
            Thread.Sleep(3000);
            Task.Factory.StartNew(() => client.Connect(server.GetPeerAddress()));

            Thread.Sleep(3000);
            server.Send(new byte[] { 1, 2, 3, 4, 5 });
            Console.WriteLine(client.Read());

            client.Close();
            Thread.Sleep(1000);
            server.Close();

            Thread.Sleep(60000);
        }
Example #4
0
        /// <summary>
        /// Disables the <see cref="ServerPeer"/>.
        /// </summary>
        /// <param name="peer">
        /// It's the peer to disable.
        /// </param>
        /// <remarks>
        /// It's called when the peer channel is disconnected or an
        /// error occurs.
        /// </remarks>
        protected virtual void DisablePeer(ServerPeer peer)
        {
            try
            {
                lock (this)
                {
                    if (_peers.Contains(peer.Name))
                    {
                        if (Logger.IsDebugEnabled)
                        {
                            Logger.Debug(string.Format("BasicServerPeerManager - DisablePeer = {0}.", peer.Name));
                        }

                        peer.MessageProcessor = null;
                        peer.Disconnected    -= new PeerDisconnectedEventHandler(OnPeerDisconnected);
                        _peers.Remove(peer.Name);
                        peer.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
                new PANE.ERRORLOG.Error().LogToFile(ex);
            }
        }
Example #5
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryEnter
        /// 作者:taixihuase
        /// 作用:通过角色数据尝试进入场景
        /// 编写日期:2015/7/22
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryEnter(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Entering");

            int uniqueId = (int)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.WorldEnter]);

            Character character;
            if (peer.Server.Characters.CharacterEnter(uniqueId, out character))
            {
                peer.Server.Data.CharacterData.GetCharacterPosition(character);
            }

            // 返回数据给客户端

            byte[] pos = Serialization.Serialize(character.Position);

            OperationResponse reponseData = new OperationResponse((byte) OperationCode.WorldEnter,
                new Dictionary<byte, object>
                {
                    {(byte) ParameterCode.WorldEnter, pos}
                })
            {
                ReturnCode = (short) ErrorCode.Ok,
                DebugMessage = "进入场景成功"
            };
            peer.SendOperationResponse(reponseData, sendParameters);

            byte[] data = Serialization.Serialize(character);
            EventData eventData = new EventData((byte) EventCode.WorldEnter, new Dictionary<byte, object>
            {
                {(byte) ParameterCode.WorldEnter, data}
            });
            eventData.SendTo(peer.Server.Characters.GamingClientsToBroadcast, sendParameters);
        }
        static void Main(string[] args)
        {
            ServerPeer serverSocket = new ServerPeer();

            serverSocket.Start(6666, 10);

            Console.ReadKey();
        }
Example #7
0
        static void Main(string[] args)
        {
            ServerPeer server = new ServerPeer();

            server.SetApplication(new NetMsgCenter());
            server.StartServer("127.0.0.1", 6666, 10);
            Console.ReadKey();
        }
Example #8
0
 // Peer's operation.
 public void AddConenectPeer(Guid guid, ServerPeer peer)
 {
     if (!ConnectedClients.ContainsKey(guid))
     {
         ConnectedClients.Add(guid, peer);
         ServerApp.Logger.Info("[ActorManager]Add peer linked. " + guid);
     }
 }
Example #9
0
 public override void SendPacket(ServerPacket packet)
 {
     if (Client != null)
     {
         packet.AddParameter(Client.PeerId.ToByteArray(), ClientParameterCode.PeerId);
         ServerPeer.SendEvent(new EventData(packet.Code, packet.Parameters), new SendParameters());
     }
 }
        public void OnStartServer()
        {
            ServerPeer       serverPeer = new ServerPeer();
            IApplicationBase app        = new NetMessageCenter();

            serverPeer.SetApplication(app);
            serverPeer.StartServer(6666, 10);
            Console.WriteLine("开启服务器成功~~");
        }
Example #11
0
        static void Main(string[] args)
        {
            ServerPeer server = new ServerPeer();

            server.SetApplication(new NetMsgCenter());
            server.StartServer("172.26.228.2", 6666, 100);
            Database.DatabaseManager.StartConnect();
            Console.ReadKey();
        }
Example #12
0
        static void Main(string[] args)
        {
            // 子封装
            ServerPeer server = new ServerPeer();

            //
            server.SetApplication(new NetMsgCenter());
            server.Start(8888, 10);
            Console.ReadKey();
        }
Example #13
0
        public static void Main(string[] args)
        {
            ServerPeer server = new ServerPeer();

            server.SetApplicationLayer(new NetMsgCenter());
            server.StartServer("127.0.0.1", 6666, 10);

            //阻塞主线程,防止退出
            Console.ReadLine();
        }
Example #14
0
        static void Main(string[] args)
        {
            ServerPeer server = new ServerPeer();

            //指定所关联的应用
            server.SetApplication(new NetMsgCenter());
            server.Start(6666, 10);

            Console.ReadKey();
        }
Example #15
0
 private void Send(ArraySegment <byte> msg)
 {
     if (!isSimulated)
     {
         ServerPeer.SendMessage(msg, UDPTransport.Source.Client);
     }
     else
     {
         ServerPeer.SendSimulatedMessage(msg, UDPTransport.Source.Client);
     }
 }
Example #16
0
        static void Main(string[] args)
        {
            ServerPeer server = new ServerPeer();

            server.SetApplication(new NetMsgCenter()); // 设置应用层
            server.StartServer("127.0.0.1", 6666, 100);

            Database.DatabaseManager.StartConnection(); // 连接数据库

            Console.ReadKey();
        }
Example #17
0
        static void Main(string[] args)
        {
            //Functional IPB login with ban checking :3
            Packet p = Packet.LoginPacket("user","password", false);
            ServerPeer srv = new ServerPeer(8850, new LoginCheckModule.IPB("http://hipolipolopig.us/SkyNet.php"));

            srv.Start();
            TcpClient cli = new TcpClient();
            cli.Connect("localhost", 8850);
            NetIO io = new NetIO(cli.GetStream());
            io.WritePacket(p);
        }
Example #18
0
        public static void SendEvent(CellRoom room)
        {
            EventData eventData = new EventData((byte)EventCode.GameEnter,
                                                new Dictionary <byte, object>());

            foreach (CellRoom.ActorInfo roomActor in room.actorList)
            {
                Actor      actor = ServerApp.instance.actorManager.GetActorFromMemberID(roomActor.memberID);
                ServerPeer peer  = ServerApp.instance.actorManager.TryGetPeer(actor.guid);

                peer.SendEvent(eventData, new SendParameters());
            }
        }
Example #19
0
        private void HandleDisconnect()
        {
            Status      = ConnectionStatus.Disconnected;
            IsConnected = false;
            UDPTransport.Disconnect();
            connectionID = -1;

            if (ServerPeer != null)
            {
                ServerPeer.Dispose();
                ServerPeer.IsConnected = false;
            }
            Disconnected?.Invoke();
        }
Example #20
0
    public void Start()
    {
        playerIdsByConnectionId = new Dictionary <int, uint>();

        ServerPeer = new ServerPeer();
        ServerPeer.OnClientConnected       += OnClientConnected;
        ServerPeer.OnClientDisconnected    += OnClientDisconnected;
        ServerPeer.ShouldSendStateSnapshots = false;

        ServerPeer.Start(PortNumber, MaxPlayerCount, this, SendGameStateInterval);

        SceneManager.sceneLoaded += OnMapLoaded;
        SceneManager.LoadScene(OsFps.SmallMapSceneName);
    }
Example #21
0
        private ServerPeer BuildServerPeer(NetConnection netConnection, ConnectionResponse response,
                                           IRegisterable <ConnectionPair <NetConnection, ServerPeer>, long> serverRegistery)
        {
            ServerPeer newPeer = this.OnConnectionSuccess(response);

            //If this is not null it means the application created a new serverpeer and it needs to be added
            //To the collection to allow for message forwarding and such.
            if (newPeer != null)
            {
                serverRegistery.Register(new ConnectionPair <NetConnection, ServerPeer>(netConnection, newPeer),
                                         netConnection.RemoteUniqueIdentifier);
            }

            return(newPeer);
        }
Example #22
0
        static void Main(string[] args)
        {
            //var db = DatabaseHelper.GetInstance();
            //db.DbFirst.CreateClassFile(@"E:\Unity\Socket服务器\GameServer\Model", "Model");//生成数据库所有表实体类
            //db.DbFirst.Where("UaseInfo").CreateClassFile(@"E:\Unity\Socket服务器\GameServer\Model", "GameServer.Model");//生成指定表实体类

            ServerPeer serverPeer = new ServerPeer();

            //指定关联的应用
            serverPeer.SetApplication(new NetMsgCenter());
            //设置端口ip
            serverPeer.Start(9999, 10);


            Console.ReadKey();
        }
Example #23
0
        public static void Main(string[] args)
        {
            ServerPeer server = new ServerPeer();

            server.Start(6666, 10);
            server.SetApplication(new NetMsgCenter());

            //string msg = "I am a message";
            //Console.WriteLine(msg);
            //byte[] msgByte = Encoding.Default.GetBytes(msg);
            //Console.WriteLine("msg.Length  : " + msg.Length);
            //byte[] newMsg = EncodeTool.EncodeMessage(msgByte);
            //Console.WriteLine("newMsg.Length  : " + newMsg.Length);
            //Console.WriteLine(Encoding.Default.GetString(newMsg));
            Console.ReadLine();
        }
Example #24
0
        /// <summary>
        /// 类型:方法
        /// 名称:RemoveCharacter
        /// 作者:taixihuase
        /// 作用:删除一个正在游戏中的角色连接
        /// 编写日期:2015/7/22
        /// </summary>
        /// <param name="guid"></param>
        public void RemoveCharacter(Guid guid)
        {
            ServerPeer peer = Server.Users.TryGetPeer(guid);

            if (peer != null)
            {
                if (GamingClientsToBroadcast.Remove(peer))
                {
                    int id = Server.Users.GetUniqueIdFromGuid(guid);
                    if (id >= 0)
                    {
                        UniqueIdToCharacterOriginal.Remove(id);
                        UniqueIdToCharacterCopy.Remove(id);
                    }
                }
            }
        }
Example #25
0
        public static void SendEvent(CellRoom room)
        {
            // Get actor list from room.
            List <CellRoom.ActorInfo> actorList = room.actorList;
            // conversion roomActorList
            List <RoomActorData> roomActorList = new List <RoomActorData>();

            for (int i = 0; i < actorList.Count; i++)
            {
                RoomActorData actorData = new RoomActorData();
                actorData.memberID = actorList[i].memberID;
                actorData.isReady  = actorList[i].isReady;
                roomActorList.Add(actorData);
            }

            // Create transfer data
            RoomInfoData roomData = new RoomInfoData();

            roomData.serial    = room.SerialNum;
            roomData.actorList = roomActorList;

            // Serialize roominfodata.
            byte[]       roomInfoDataByte = ProtoBufTool.Serialize(roomData);
            RoomInfoData testData         = ProtoBufTool.Deserialize <RoomInfoData>(roomInfoDataByte);

            ServerApp.Logger.Info(testData.serial);

            // push data to actors
            for (int i = 0; i < actorList.Count; i++)
            {
                // get peer
                Actor      actor = ServerApp.instance.actorManager.GetActorFromMemberID(actorList[i].memberID);
                ServerPeer peer  = ServerApp.instance.actorManager.TryGetPeer(actor.guid);

                // generate event data.
                var eventDict = new Dictionary <byte, object>();
                eventDict.Add((byte)ParameterCode.RoomInfoData, roomInfoDataByte);

                EventData eventData = new EventData((byte)EventCode.RoomUpdate);
                eventData.Parameters = eventDict;

                peer.SendEvent(eventData, new SendParameters());
            }
        }
Example #26
0
        static void Main(string[] args)
        {
            AccDto dto = new AccDto();

            dto.Id  = 1;
            dto.Acc = "qwertt";
            dto.Pwd = "12345";

            byte[] buffer = PBSerialize(dto);

            for (int i = 0; i < buffer.Length; i++)
            {
                Console.Write(buffer[i]);
            }
            Console.WriteLine();
            Console.WriteLine("==========================");

            AccDto dto2 = PBDSerialize <AccDto>(buffer);

            Console.WriteLine("dto2 id:{0}  acc:{1} pwd:{2}", dto2.Id, dto2.Acc, dto2.Pwd);

            Console.WriteLine();
            Console.WriteLine("==========================");

            AccDto dto3 = (AccDto)PBDSerialize(buffer, typeof(AccDto));

            Console.WriteLine("dto2 id:{0}  acc:{1} pwd:{2}", dto3.Id, dto3.Acc, dto3.Pwd);


            ServerPeer server = new ServerPeer();

            //指定所关联的应用
            server.SetApplication(new NetMsgCenter());
            server.Start(6666, 10);

            //序列化 和 反序列化 方法的赋值
            //EncodeTool.decodeObjDelegate = PBDSerialize;

            EncodeTool.encodeObjDelegate = PBSerialize;

            Console.ReadKey();
        }
Example #27
0
        public override void Update()
        {
            if (ServerPeer != null)
            {
                DoStart();
                ServerPeer.Update(localTick);

                if (Room != null)
                {
                    Room.ClientUpdate(localTick, ServerPeer.EstimatedRemoteTick);

                    int sendRate = RailConfig.CLIENT_SEND_RATE;
                    if (localTick.IsSendTick(sendRate))
                    {
                        ServerPeer.SendPacket(localTick, Room.LocalEntities);
                    }

                    localTick++;
                }
            }
        }
Example #28
0
        public ServerContext AddServer(ServiceFactory factory, uint cookie, ServerPeer serverPeer, uint refPrimaryCookie = 0)
        {
            var serverContext = GetServerContext(cookie);

            if (null != serverContext)
            {
                return(serverContext);
            }

            serverContext         = this.Factory.CreateServerContext();
            serverContext.Factory = factory;
            serverContext.Server  = serverPeer;

            lock (_syncRootServer)
            {
                _servers[cookie]       = serverContext;
                _serverMapping[cookie] = 0 == refPrimaryCookie ? cookie : refPrimaryCookie;
            }

            return(serverContext);
        }
Example #29
0
        /// <summary>
        /// Through the invocation of this method <see cref="Server"/> informs to
        /// the peer manager of the connection of the indicated channel.
        /// </summary>
        /// <param name="channel">
        /// It's the connected channel.
        /// </param>
        /// <returns>
        /// The peer associated to the channel.
        /// </returns>
        /// <remarks>
        /// Normally at this time the peers manager associates the channel to the peer.
        /// </remarks>
        public ServerPeer Connected(IChannel channel)
        {
            new PANE.ERRORLOG.Error().LogInfo("Entered connected");
            ServerPeer peer = null;

            try
            {
                lock (this)
                {
                    peer = GetServerPeer(channel);
                    if (peer != null)
                    {
                        _peers.Add(peer);
                        if ((peer as ServerPeer).Channel.Name == channel.Name)
                        {
                            (_messageProcessor as ExternalServerProcessor).TheBridge.PostBridgeNodePeer = peer;

                            if (PinConfigurationManager.FepConfig.KeyExchangeOnConnect)
                            {
                                new PANE.ERRORLOG.Error().LogInfo("about to do key exchange");
                                if (_keyExchangeTimer == null)
                                {
                                    _keyExchangeTimer = new Timer(new TimerCallback(DoKeyExchange), peer, 1000, Timeout.Infinite);
                                    // DoKeyExchange(null);
                                }
                                else
                                {
                                    _keyExchangeTimer.Change(600000, Timeout.Infinite);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex) { new PANE.ERRORLOG.Error().LogToFile(ex); }

            return(peer);
        }
Example #30
0
        /// <summary>
        /// It creates a new server peer, and associates the provided
        /// channel to it.
        /// </summary>
        /// <param name="channel">
        /// It's the channel to associate with the peer.
        /// </param>
        /// <returns>
        /// It's the new server peer.
        /// </returns>
        protected virtual ServerPeer GetServerPeer(IChannel channel)
        {
            ServerPeer peer = null;

            try
            {
                TcpChannel chnl = channel as TcpChannel;
                if (chnl == null)
                {
                    return(null);
                }

                if (_messagesIdentifier == null)
                {
                    peer = new ServerPeer(chnl.HostName);
                }
                else
                {
                    peer = new ServerPeer(chnl.HostName, _messagesIdentifier);
                }

                peer.MessageProcessor = this;

                peer.Disconnected += new PeerDisconnectedEventHandler(OnPeerDisconnected);
                peer.Bind(channel);

                if (Logger.IsDebugEnabled)
                {
                    Logger.Info(string.Format("BasicServerPeerManager - GetServerPeer = {0}.", chnl.HostName));

                    new PANE.ERRORLOG.Error().LogInfo(string.Format("BasicServerPeerManager - GetServerPeer = {0}.", chnl.HostName));
                }
            }
            catch (Exception ex) { new PANE.ERRORLOG.Error().LogToFile(ex); }

            return(peer);
        }
Example #31
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryCreate
        /// 作者:taixihuase
        /// 作用:通过请求的角色数据,尝试创建、记录一个新的角色数据并再次返回给客户端
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryCreate(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Create a new character...");

            Character character = (Character)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.CreateCharacter]);

            peer.Server.Data.CharacterData.CreateNewCharacter(character);
            peer.Server.Characters.CharacterLoad(character);

            byte[] data = Serialization.Serialize(character);

            var parameter = new Dictionary<byte, object>
            {
                {(byte) ParameterCode.CreateCharacter, data}
            };
            OperationResponse response = new OperationResponse((byte) OperationCode.CreateCharacter, parameter)
            {
                ReturnCode = (short) ErrorCode.Ok,
                DebugMessage = "创建角色成功!"
            };

            peer.SendOperationResponse(response, sendParameters);
        }
Example #32
0
 /// <summary>
 /// 类型:方法
 /// 名称:AddGamingCharacter
 /// 作者:taixihuase
 /// 作用:添加一个正在游戏的客户端连接
 /// 编写日期:2015/7/22
 /// </summary>
 /// <param name="peer"></param>
 public void AddGamingCharacter(ServerPeer peer)
 {
     GamingClientsToBroadcast.Add(peer);
 }
Example #33
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryEnter
        /// 作者:taixihuase
        /// 作用:通过角色数据尝试进入场景
        /// 编写日期:2015/7/22
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryEnter(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Entering");

            int uniqueId = (int)
                           Serialization.Deserialize(operationRequest.Parameters[(byte)ParameterCode.WorldEnter]);

            Character character;

            if (peer.Server.Characters.CharacterEnter(uniqueId, out character))
            {
                peer.Server.Data.CharacterData.GetCharacterPosition(character);
            }

            // 返回数据给客户端

            byte[] pos = Serialization.Serialize(character.Position);

            OperationResponse reponseData = new OperationResponse((byte)OperationCode.WorldEnter,
                                                                  new Dictionary <byte, object>
            {
                { (byte)ParameterCode.WorldEnter, pos }
            })
            {
                ReturnCode   = (short)ErrorCode.Ok,
                DebugMessage = "进入场景成功"
            };

            peer.SendOperationResponse(reponseData, sendParameters);

            byte[]    data      = Serialization.Serialize(character);
            EventData eventData = new EventData((byte)EventCode.WorldEnter, new Dictionary <byte, object>
            {
                { (byte)ParameterCode.WorldEnter, data }
            });

            eventData.SendTo(peer.Server.Characters.GamingClientsToBroadcast, sendParameters);
        }
Example #34
0
 /// <summary>
 /// 类型:方法
 /// 名称:OnRequest
 /// 作者:taixihuase
 /// 作用:当收到请求时,进行处理
 /// 编写日期:2015/7/22
 /// </summary>
 /// <param name="operationRequest"></param>
 /// <param name="sendParameters"></param>
 /// <param name="peer"></param>
 public static void OnRequest(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
 {
     TryEnter(operationRequest, sendParameters, peer);
 }
Example #35
0
  /// <summary>
  /// 类型:方法
  /// 名称:AddConnectedPeer
  /// 作者:taixihuase
  /// 作用:添加一个新的客户端连接
  /// 编写日期:2015/7/12
  /// </summary>
  /// <param name="guid"></param>
  /// <param name="peer"></param>
 public void AddConnectedPeer(Guid guid, ServerPeer peer)
 {
     ConnectedClients.Add(guid, peer);
     ConnectedClientsToBroadcast.Add(peer);
 }
Example #36
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryLogin
        /// 作者:taixihuase
        /// 作用:通过登录数据尝试登录
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryLogin(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Logining...");

            LoginInfo login = (LoginInfo)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.Login]);

            #region 对账号密码进行判断

            ServerPeer.Log.Debug(DateTime.Now + " : Loginning...");
            ServerPeer.Log.Debug(login.Account);
            ServerPeer.Log.Debug(login.Password);

            // 获取用户资料
            UserInfo user = new UserInfo(peer.PeerGuid, login.Account);
            UserCollection.UserReturn userReturn = peer.Server.Users.UserOnline(user, login.Password);

            // 若成功取得用户资料
            if (userReturn.ReturnCode == UserCollection.UserReturn.ReturnCodeType.Success)
            {
                ServerPeer.Log.Debug(user.LoginTime + " :User " + user.Nickname + " loginning...");

                // 用于选择的数据返回参数
                var parameter = new Dictionary<byte, object>();

                // 用于选择的字符串信息
                string message = "";

                // 用于选择的返回值
                short returnCode = -1;

                #region 获取角色资料

                Character character = new Character(user);
                CharacterCollection.CharacterReturn characterReturn =
                    peer.Server.Characters.SearchCharacter(character);

                // 若取得角色资料
                if (characterReturn.ReturnCode == CharacterCollection.CharacterReturn.ReturnCodeType.Success)
                {
                    byte[] playerBytes = Serialization.Serialize(character);
                    parameter.Add((byte) ParameterCode.Login, playerBytes);
                    returnCode = (short) ErrorCode.Ok;
                    message = "";

                    peer.Server.Characters.CharacterLoad(character);
                }
                else if (characterReturn.ReturnCode == CharacterNotFound)
                {
                    byte[] userBytes = Serialization.Serialize(user);
                    parameter.Add((byte) ParameterCode.Login, userBytes);
                    returnCode = (short) ErrorCode.CharacterNotFound;
                    message = characterReturn.DebugMessage.ToString();
                }

                #endregion

                OperationResponse response = new OperationResponse((byte) OperationCode.Login, parameter)
                {
                    ReturnCode = returnCode,
                    DebugMessage = message
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(user.LoginTime + " : User " + user.Account + " logins successfully");
            }
            // 若重复登录
            else if (userReturn.ReturnCode == RepeatedLogin)
            {
                OperationResponse response = new OperationResponse((byte) OperationCode.Login)
                {
                    ReturnCode = (short) ErrorCode.RepeatedOperation,
                    DebugMessage = "账号已登录!"
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to login " + user.Account + " Because of " +
                                     Enum.GetName(typeof (UserCollection.UserReturn.ReturnCodeType),
                                         userReturn.ReturnCode));
            }
            else
            {
                // 返回非法登录错误
                OperationResponse response = new OperationResponse((byte) OperationCode.Login)
                {
                    ReturnCode = (short) ErrorCode.InvalidOperation,
                    DebugMessage = userReturn.DebugMessage.ToString()
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to login " + user.Account + " Because of " +
                                     Enum.GetName(typeof (UserCollection.UserReturn.ReturnCodeType),
                                         userReturn.ReturnCode));
            }

            #endregion
        }
 /// <summary>
 /// 类型:方法
 /// 名称:AddGamingCharacter
 /// 作者:taixihuase
 /// 作用:添加一个正在游戏的客户端连接
 /// 编写日期:2015/7/22
 /// </summary>
 /// <param name="peer"></param>
 public void AddGamingCharacter(ServerPeer peer)
 {
     GamingClientsToBroadcast.Add(peer);
 }
Example #38
0
 /// <summary>
 /// 类型:方法
 /// 名称:OnRequest
 /// 作者:taixihuase
 /// 作用:当收到请求时,进行处理
 /// 编写日期:2015/7/24
 /// </summary>
 /// <param name="operationRequest"></param>
 /// <param name="sendParameters"></param>
 /// <param name="peer"></param>
 public static void OnRequest(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
 {
     TryRegist(operationRequest, sendParameters, peer);
 }