/// <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)); } }
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); }
/// <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); } }
/// <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(); }
static void Main(string[] args) { ServerPeer server = new ServerPeer(); server.SetApplication(new NetMsgCenter()); server.StartServer("127.0.0.1", 6666, 10); Console.ReadKey(); }
// 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); } }
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("开启服务器成功~~"); }
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(); }
static void Main(string[] args) { // 子封装 ServerPeer server = new ServerPeer(); // server.SetApplication(new NetMsgCenter()); server.Start(8888, 10); Console.ReadKey(); }
public static void Main(string[] args) { ServerPeer server = new ServerPeer(); server.SetApplicationLayer(new NetMsgCenter()); server.StartServer("127.0.0.1", 6666, 10); //阻塞主线程,防止退出 Console.ReadLine(); }
static void Main(string[] args) { ServerPeer server = new ServerPeer(); //指定所关联的应用 server.SetApplication(new NetMsgCenter()); server.Start(6666, 10); Console.ReadKey(); }
private void Send(ArraySegment <byte> msg) { if (!isSimulated) { ServerPeer.SendMessage(msg, UDPTransport.Source.Client); } else { ServerPeer.SendSimulatedMessage(msg, UDPTransport.Source.Client); } }
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(); }
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); }
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()); } }
private void HandleDisconnect() { Status = ConnectionStatus.Disconnected; IsConnected = false; UDPTransport.Disconnect(); connectionID = -1; if (ServerPeer != null) { ServerPeer.Dispose(); ServerPeer.IsConnected = false; } Disconnected?.Invoke(); }
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); }
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); }
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(); }
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(); }
/// <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); } } } }
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()); } }
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(); }
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++; } } }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 类型:方法 /// 名称:AddGamingCharacter /// 作者:taixihuase /// 作用:添加一个正在游戏的客户端连接 /// 编写日期:2015/7/22 /// </summary> /// <param name="peer"></param> public void AddGamingCharacter(ServerPeer peer) { GamingClientsToBroadcast.Add(peer); }
/// <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); }
/// <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); }
/// <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); }
/// <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> /// 类型:方法 /// 名称: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); }