コード例 #1
0
    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;
    }
コード例 #2
0
 public static void DeInit()
 {
     if (ServerMessaging.m_handler != null)
     {
         ServerMessaging.m_handler.Destruct();
         ServerMessaging.m_handler = null;
     }
 }
コード例 #3
0
        public IEnumerator RegisterMessage1() => UniTask.ToCoroutine(async() =>
        {
            bool invoked = false;

            ServerMessageHandler.RegisterHandler <WovenTestMessage>(msg => invoked = true);
            clientPlayer.Send(message);

            await AsyncUtil.WaitUntilWithTimeout(() => invoked);
        });
コード例 #4
0
ファイル: ServerReactor.cs プロジェクト: NoDogsInc/Cube
        public void AddHandler(byte id, ServerMessageHandler handler)
        {
            if (handlers.ContainsKey(id))
            {
                throw new Exception("Message handler already set");
            }

            handlers[id] = handler;
        }
コード例 #5
0
    // Use  this for initialization
    void Start()
    {
        PacketQueue.GetInstance().packetLoss = PacketLoss;
        MessageHandler = new ServerMessageHandler(this);
        Thread thread = new Thread(new ThreadStart(ThreadMethod));

        thread.Start();
        SimulateConnections();
    }
コード例 #6
0
ファイル: NetworkManager.cs プロジェクト: Galli24/RetroGame
        private NetworkManager()
        {
            var conf = Config.Parse();

            _tcpClient            = new TCPClient(conf.GameServerIP, conf.GameServerPort);
            _serverMessageHandler = new ServerMessageHandler(_tcpClient);

            _authServerURI = conf.AuthServerURL;
        }
コード例 #7
0
 /// <summary>
 /// 获取服务器事件消息处理Handler
 /// </summary>
 /// <param name="tenantId"></param>
 /// <returns></returns>
 private static ServerMessageHandler GetServerMessageHandler(int tenantId)
 {
     if (ServerMessageHandler == null)
     {
         ServerMessageHandler = new WeChatServerMessageHandler(tenantId)
         {
         };
     }
     return(ServerMessageHandler);
 }
コード例 #8
0
 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");
     }
 }
コード例 #9
0
        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);
        });
コード例 #10
0
        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);
        });
コード例 #11
0
 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();
     }
 }
コード例 #12
0
        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);
            }
        }
コード例 #13
0
        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>());
        });
コード例 #14
0
        /// <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);
        }
コード例 #15
0
ファイル: ClientServerTest.cs プロジェクト: SachekDenis/EPAM
        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);
        }
コード例 #16
0
        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("图文格式有误!");
            }
        }
コード例 #17
0
        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);
        }
コード例 #18
0
    // 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";
    }
コード例 #19
0
ファイル: Room.cs プロジェクト: Orlokun/JuegoColab
    //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;
    }
コード例 #20
0
        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);
        }
コード例 #21
0
        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");
        }
コード例 #22
0
    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());
    }
コード例 #23
0
 public override void Dispatch(ServerMessageHandler handler)
 {
     handler.Handle(this);
 }
コード例 #24
0
        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;
            }
        }
コード例 #25
0
 public abstract void Dispatch(ServerMessageHandler handler);
コード例 #26
0
 public WxEventController(ServerMessageHandler serverMessageHandler, ILogger <WxEventController> logger)
 {
     this.serverMessageHandler = serverMessageHandler;
     this.logger = logger;
 }
コード例 #27
0
 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();
     }
 }
コード例 #28
0
 public static void Init(ServerMessageManager messageManager)
 {
     ServerMessaging.m_handler = new ServerMessageHandler(messageManager);
 }
コード例 #29
0
 public ServerMessage_Tests(TestWebApplicationFactory webApplicationFactory, ITestOutputHelper output) : base(webApplicationFactory, output)
 {
     serverMessageHandler = GetRequiredService <ServerMessageHandler>();
 }