public Room(int _id, Server _server, ServerMessageHandler _sender, int _maxPlayers, RoomLogger logger) { maxPlayers = _maxPlayers; numPlayers = 0; sender = _sender; server = _server; started = false; record = ""; id = _id; activatedSwitchGroups = new List <int>(); systemsManager = new RoomSystems(); obstacleManager = new RoomObstacles(); objectManager = new RoomDestroyedObjects(); poisHandler = new PoisHandler(); players = new List <NetworkPlayer>(); switchs = new List <RoomSwitch>(); enemies = new List <NetworkEnemy>(); deathGameObject = new List <string>(); hpManager = new RoomHpMp(this); if (logger == null) { log = new RoomLogger(this.id); } else { log = logger; } sceneToLoad = Server.instance.sceneToLoad; }
public static void DeInit() { if (ServerMessaging.m_handler != null) { ServerMessaging.m_handler.Destruct(); ServerMessaging.m_handler = null; } }
public IEnumerator RegisterMessage1() => UniTask.ToCoroutine(async() => { bool invoked = false; ServerMessageHandler.RegisterHandler <WovenTestMessage>(msg => invoked = true); clientPlayer.Send(message); await AsyncUtil.WaitUntilWithTimeout(() => invoked); });
public void AddHandler(byte id, ServerMessageHandler handler) { if (handlers.ContainsKey(id)) { throw new Exception("Message handler already set"); } handlers[id] = handler; }
// Use this for initialization void Start() { PacketQueue.GetInstance().packetLoss = PacketLoss; MessageHandler = new ServerMessageHandler(this); Thread thread = new Thread(new ThreadStart(ThreadMethod)); thread.Start(); SimulateConnections(); }
private NetworkManager() { var conf = Config.Parse(); _tcpClient = new TCPClient(conf.GameServerIP, conf.GameServerPort); _serverMessageHandler = new ServerMessageHandler(_tcpClient); _authServerURI = conf.AuthServerURL; }
/// <summary> /// 获取服务器事件消息处理Handler /// </summary> /// <param name="tenantId"></param> /// <returns></returns> private static ServerMessageHandler GetServerMessageHandler(int tenantId) { if (ServerMessageHandler == null) { ServerMessageHandler = new WeChatServerMessageHandler(tenantId) { }; } return(ServerMessageHandler); }
public void RegisterMessageHandler(int msgID, ServerMessageHandler handler) { if (!messageHandlerDic.ContainsKey(msgID)) { messageHandlerDic.Add(msgID, handler); } else { NetLogger.Error(LOG_TAG, $"The handler({msgID}) has been registed"); } }
public IEnumerator DontAutoSpawnTest() => UniTask.ToCoroutine(async() => { var invokeAddPlayerMessage = false; ServerMessageHandler.RegisterHandler <AddCharacterMessage>(msg => invokeAddPlayerMessage = true); sceneManager.ServerLoadSceneNormal(TestScene.Path); // wait for messages to be processed await UniTask.Yield(); Assert.That(invokeAddPlayerMessage, Is.False); });
public IEnumerator ManualSpawnTest() => UniTask.ToCoroutine(async() => { var invokeAddPlayerMessage = false; ServerMessageHandler.RegisterHandler <AddCharacterMessage>(msg => invokeAddPlayerMessage = true); spawner.RequestServerSpawnPlayer(); // wait for messages to be processed await UniTask.Yield(); Assert.That(invokeAddPlayerMessage, Is.True); });
static void ServerMatchingPlayer() { if (waitingList.Count >= 2) { int player1ThreadID, player2ThreadID; List <KeyValuePair <string, string> > cont = MatchPlayer(out player1ThreadID, out player2ThreadID); StreamWriter swPlayer1 = activeThread[player1ThreadID]; StreamWriter swPlayer2 = activeThread[player2ThreadID]; //Console.WriteLine(player1ThreadID + " " + player2ThreadID); ServerMessageHandler smsg = new ServerMessageHandler("MatchOpponentResponse", cont, swPlayer1, swPlayer2); smsg.ProcessServerMessage(); } }
public void OnServerMessage(object sender, MessageHeader msghdr) { Type msgtype = msghdr.GetType(); if (MessageHandlers.ContainsKey(msgtype)) { EventHandler <MessageHeader> MessageHandler = MessageHandlers[msgtype]; MessageHandler?.Invoke(sender, msghdr); } else { ServerMessageHandler?.Invoke(sender, msghdr); } }
public IEnumerator UnRegisterMessage1() => UniTask.ToCoroutine(async() => { MessageDelegate <WovenTestMessage> func = Substitute.For <MessageDelegate <WovenTestMessage> >(); ServerMessageHandler.RegisterHandler(func); ServerMessageHandler.UnregisterHandler <WovenTestMessage>(); clientPlayer.Send(message); await UniTask.Delay(1); func.Received(0).Invoke( Arg.Any <WovenTestMessage>()); });
/// <summary> /// 构造 /// </summary> /// <param name="address"></param> /// <param name="serverId"></param> public Server(Uri address, string serverId) { ServerId = serverId; _service = new ServiceHost(typeof(DuplexServerContract), address); _service.AddServiceEndpoint(typeof(IDuplexContract), new NetNamedPipeBinding(), address); //监听客户端初始化事件 ServerMessageHandler.TryAddMessageListener(InnerMessageIds.CheckServerBinding, HasClientBoundServer); ServerMessageHandler.TryAddMessageListener(InnerMessageIds.CheckServerBinding, HasClientBoundServerAsync); ServerMessageHandler.TryAddMessageListener(InnerMessageIds.BindingServer, ClientBindingServer); ServerMessageHandler.TryAddMessageListener(InnerMessageIds.BindingServer, ClientBindingServerAsync); //在服务池中:注册此服务对应的消息处理 DuplexServicePool.AddOrUpdateServiceHost(_service, ServerMessageHandler); }
public void ClientWriteServerReadTest(string ip, int port, string clientString, string receivedMessage) { ServerMessageHandler messageHandler = new ServerMessageHandler(); //Run server in new thread var task = Task.Factory.StartNew(() => { Server server = new Server(ip, port); server.MessageEvent += messageHandler.HandleMessage; server.StartServer(); server.GetMessage(); Assert.AreEqual(receivedMessage, messageHandler.ServerMessages[IPAddress.Parse(ip)]); }); Client client = new Client(ip, port); client.SendMessage(clientString); }
public void ServerMessageHandlerTest_ToMessageXmlTest() { var toMsg = new ToNewsMessage() { Articles = new List <ToNewsMessage.ArticleInfo>() { new ToNewsMessage.ArticleInfo() { Description = "湖南心莱信息科技有限公司是由一群从北上广回归的精英携手创建的一家专注软件开发的公司,公司成员基本上都有从事软件开发5年以上的工作经验,并且均领导实施过中大型软件项目。公司以“踏实,直率相处,乐于助人;对技术满怀热情;致力于帮助客户带来价值”为核心价值,希望通过专业水平和不懈努力,为中小企业提供优质的软件服务,为中小软件公司提供优质的软件技术服务。为了帮助中小软件公司快速开发和定制微信公众号,公司精心打造了两款产品——Magicodes.WeiChat和Magicodes.Shop,分别为微信快速定制开发框架和微信商城框架。其中,Magicodes.WeiChat已经拥有了100+正式用户和10+合作伙伴,并且广受好评。 Magicodes.Shop是产品团队在Magicodes.WeiChat基础上,应广大合作伙伴要求,针对微商城这块业务进行封装和提炼,精心打造的微商城产品。公司不仅仅提供专业的软件开发服务,同时还建立了完善的售后服务体系,为企业发展中遇到的问题和困难提供指导帮助。我们相信,通过我们的不断努力和追求,一定能够实现与中小企业的互利共赢,帮助中小企业带来价值!", PicUrl = "http://xin-lai.com/PlugIns/Magicodes.Home/wwwroot/unify/img/logo.png", Title = "心莱科技官方介绍", Url = "http://xin-lai.com" } }, FromUserName = "******", ToUserName = "******" }; var serverMessageHandler = new ServerMessageHandler(1) { HandleFuncs = new Dictionary <Type, Func <IFromMessage, ToMessageBase> >() { { typeof(FromTextMessage), message => toMsg } } }; var result = serverMessageHandler.HandleMessage( @"<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>").Result; var xmlStr = result.ToXml(); var xEle = XElement.Parse(xmlStr); if (xEle.Element("Articles") == null) { Assert.Fail("图文格式有误!"); } }
public void ServerMessageHandlerTest_HandleMessageTest() { var serverMessageHandler = new ServerMessageHandler(1) { HandleFuncs = new Dictionary <Type, Func <IFromMessage, ToMessageBase> >() { { typeof(FromTextMessage), message => new ToTextMessage() { Content = "Test", } } } }; var result = serverMessageHandler.HandleMessage( @"<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>").Result; if (result.CreateDateTime == default(DateTime)) { Assert.Fail("时间格式错误"); } if (result.ToUserName != "fromUser") { Assert.Fail("错误!"); } var xml = result.ToXml(); if (string.IsNullOrWhiteSpace(xml)) { Assert.Fail("序列化XML格式错误!"); } //Assert.AreEqual( // "<xml><ToUserName>fromUser</ToUserName><FromUserName>toUser</FromUserName><CreateTime>1494409853</CreateTime><MsgType>text</MsgType><Content>Test</Content></xml", // xml); }
// Use this for initialization void Start() { NPCsLastMessage = ""; maxJugadores = 3; instance = this; timesScene1IsLoaded = 0; NetworkTransport.Init(); serverNetworkDiscovery = GetComponent <ServerNetworkDiscovery>(); ConnectionConfig config = new ConnectionConfig(); channelId = config.AddChannel(QosType.Unreliable); bigChannelId = config.AddChannel(QosType.ReliableFragmented); secureChannel = config.AddChannel(QosType.Reliable); HostTopology topology = new HostTopology(config, maxConnections); int[] connectionData = serverNetworkDiscovery.CreateServer(topology); if (connectionData[0] != -1 && connectionData[1] != -1) { port = connectionData[0]; socketId = connectionData[1]; listening = true; UnityEngine.Debug.Log("Server listening on port " + port); } else { throw new Exception("Server didn't found a free port"); } rooms = new List <Room>(); messageHandler = new ServerMessageHandler(this); planner = new Thread(new ThreadStart(this.Plan)); planner.Start(); this.sceneToLoad = "Escena1"; }
//Inicialización public Room(int id, Server server, ServerMessageHandler sender, int maxJugadores) { numJugadores = 0; this.doorManager = new ServerDoorsManager(); this.maxJugadores = maxJugadores; this.id = id; hpManaGer = new RoomHpMp(this); log = new RoomLogger(this.id); switchs = new List <ServerSwitch>(); players = new List <NetworkPlayer>(); enemies = new List <NetworkEnemy>(); activatedGroups = new List <int>(); this.server = server; this.sender = sender; started = false; historial = ""; sceneToLoad = Server.instance.sceneToLoad; }
public void ServerMessageHandlerTest_FromSubscribeEvent_HandleMessageTest() { var serverMessageHandler = new ServerMessageHandler(1) { HandleFuncs = new Dictionary <Type, Func <IFromMessage, ToMessageBase> >() { { typeof(FromSubscribeEvent), message => new ToTextMessage() { Content = "Test", } } } }; var result = serverMessageHandler.HandleMessage( @"<xml><ToUserName><![CDATA[gh_44ab71bac0b5]]></ToUserName> <FromUserName><![CDATA[owQ_nw9_ZA8uGdqWYp1ckdFQ6aeo]]></FromUserName> <CreateTime>1504084003</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[]]></EventKey> </xml>").Result; if (result.CreateDateTime == default(DateTime)) { Assert.Fail("时间格式错误"); } var xml = result.ToXml(); if (string.IsNullOrWhiteSpace(xml)) { Assert.Fail("序列化XML格式错误!"); } //Assert.AreEqual( // "<xml><ToUserName>fromUser</ToUserName><FromUserName>toUser</FromUserName><CreateTime>1494409853</CreateTime><MsgType>text</MsgType><Content>Test</Content></xml", // xml); }
public override void Initialize() { Log.Trace("Initializing Server Conceal Session", "Initialize"); Log.Trace("Loading settings", "Initialize"); Settings.Load(); Log.Trace("Registering message handler", "Initialize"); Messenger = new ServerMessageHandler(); Log.Trace("Registering concealment manager", "Initialize"); Manager = new ConcealmentManager(); Manager.Initialize(); if (!Manager.Loaded) { Log.Error("Error loading sector, conceal disabled.", "Initialize"); Messenger.Disabled = true; } base.Initialize(); Instance = this; Log.Trace("Finished Initializing Server Conceal Session", "Initialize"); }
private void Start() { if (m_Instance == null) { m_Instance = this; } Application.runInBackground = true; m_SyncContext = SynchronizationContext.Current; m_Smh = new ServerMessageHandler(); m_AesModule = new AesModule(); m_AesModule.InitializeProvider(); EventSink.LoginSuccessEvent += EventSink_LoginAcceptedEvent; EventSink.PublicKeySetEvent += EventSink_PublicKeySetEvent; EventSink.ConnectionFailedEvent += EventSink_ConnectionFailedEvent; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; StartCoroutine(StartClient()); }
public override void Dispatch(ServerMessageHandler handler) { handler.Handle(this); }
private async void server_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) { // Get InputStream BinaryReader reader; try { reader = new BinaryReader(args.GetDataStream().AsStreamForRead()); } catch (Exception e) { if (SocketError.GetStatus(e.HResult) != SocketErrorStatus.ConnectionResetByPeer) { throw; } return; } byte[] header = reader.ReadBytes(8); string headerstr = Encoding.UTF8.GetString(header, 0, header.Length); Guid guid = new Guid(reader.ReadBytes(16)); ServerMessageHandler handler = ServerMessageHandler.Close; // Identify the handler if (clientList.ContainsKey(guid) && clientList[guid].Closing) { handler = ServerMessageHandler.Close; } else if (!clientList.ContainsKey(guid) && headerstr != "SHClCONN" && headerstr != "SHClPING") { handler = ServerMessageHandler.Close; } else { if (headerstr == "SHClPING") { handler = ServerMessageHandler.Ping; } if (headerstr == "SHClCONN") { handler = ServerMessageHandler.Connect; } if (headerstr == "SHClCLSE") { handler = ServerMessageHandler.Close; } if (headerstr == "SHClDATA") { handler = ServerMessageHandler.Data; } if (headerstr == "SHClSLNT") { handler = ServerMessageHandler.Silent; } } BinaryWriter writer = null; // For data, we don't need to get the output stream if (handler != ServerMessageHandler.Data && handler != ServerMessageHandler.Silent) { var outputStream = await sender.GetOutputStreamAsync(args.RemoteAddress, args.RemotePort); writer = new BinaryWriter(outputStream.AsStreamForWrite()); } // Handle the message switch (handler) { case ServerMessageHandler.Close: Header_CLSE(guid, writer); break; case ServerMessageHandler.Connect: Header_CONN(guid, reader, writer); break; case ServerMessageHandler.Ping: Header_PING(guid, writer); break; case ServerMessageHandler.Data: Header_DATA(guid, reader); break; case ServerMessageHandler.Silent: Header_SLNT(guid); break; } }
public abstract void Dispatch(ServerMessageHandler handler);
public WxEventController(ServerMessageHandler serverMessageHandler, ILogger <WxEventController> logger) { this.serverMessageHandler = serverMessageHandler; this.logger = logger; }
static void ReceiveRequestFromClient() { while (true) { Socket soc = listener.AcceptSocket(); Console.WriteLine("Connected: {0}", soc.RemoteEndPoint); try { object locker = new object(); Stream s = new NetworkStream(soc); StreamReader sr = new StreamReader(s); StreamWriter sw = new StreamWriter(s); sw.AutoFlush = true; lock (locker) { activeThread.Add(Thread.CurrentThread.ManagedThreadId, sw); } //Console.WriteLine(Thread.CurrentThread.ManagedThreadId); while (soc.Connected) { string recv = ""; while (soc.Connected) { string temp = sr.ReadLine(); if (temp == "$" || temp == "" || temp == null) { break; } else { recv += temp; } } Console.WriteLine("Receive: " + recv); JsonParser parser = new JsonParser(recv); ClientMessageHandler msg = new ClientMessageHandler(parser.Parse(), sw); ServerMessageHandler smsg = msg.ProcessClientMessage(); smsg.ProcessServerMessage(); } } catch { } Console.WriteLine("Disconnected: {0}", soc.RemoteEndPoint); lock (locker) { try { activeThread.Remove(Thread.CurrentThread.ManagedThreadId); var playerName = playerNameList.FirstOrDefault(x => x.Value == Thread.CurrentThread.ManagedThreadId).Key; if (playerName != null) { playerNameList.Remove(playerName); playerPriority.Remove(playerName); if (waitingList.ContainsKey(playerName)) { waitingList.Remove(playerName); } if (playerGameStateIdMapping.ContainsKey(playerName)) { int gameStateIdMapping = playerGameStateIdMapping[playerName]; playerGameStateIdMapping.Remove(playerName); if (activeGameState.ContainsKey(gameStateIdMapping)) { GameStateManager gameStateManager = activeGameState[gameStateIdMapping]; string opponentPlayerName; if (gameStateManager.player1.playerName == playerName) { gameStateManager.player1.isOnline = false; opponentPlayerName = gameStateManager.player2.playerName; } else { gameStateManager.player2.isOnline = false; opponentPlayerName = gameStateManager.player1.playerName; } if (playerNameList.ContainsKey(opponentPlayerName)) { int opponentThreadId = playerNameList[opponentPlayerName]; StreamWriter targetSW = activeThread[opponentThreadId]; ServerMessageHandler smsg = new ServerMessageHandler(); smsg.header = "Crashed"; smsg.swReceiver = targetSW; smsg.ProcessServerMessage(); } } } } } catch (Exception e) { Console.WriteLine(e.ToString()); } } soc.Close(); } }
public static void Init(ServerMessageManager messageManager) { ServerMessaging.m_handler = new ServerMessageHandler(messageManager); }
public ServerMessage_Tests(TestWebApplicationFactory webApplicationFactory, ITestOutputHelper output) : base(webApplicationFactory, output) { serverMessageHandler = GetRequiredService <ServerMessageHandler>(); }