public void analyse(string msg, Fleck.IWebSocketConnection clientSock) { //int totalLen = buffer.Length; //int currentIndex = 0; //while (currentIndex < totalLen) //{ // if (verify(buffer) == false) // break; // int DataLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(buffer, 8 + currentIndex)); // byte[] dataBuffer = new byte[DataLength]; // Array.Copy(buffer, 12 + currentIndex, dataBuffer, 0, DataLength); // string msg = System.Text.Encoding.UTF8.GetString(dataBuffer); // MsgPair msgPair = dispatch(msg, clientSock); // currentIndex += DataLength + 12; // // ClientUpdateMessage(byteMessage, clientSock, 2); // if (msgPair != null) // sendMsgToServer(msgPair.msg, clientSock, msgPair.type); //} if (!verify(msg)) { return; } msg = msg.Substring(16); MsgPair msgPair = dispatch(msg, clientSock); if (msgPair != null) { sendMsgToServer(msgPair.msg, clientSock, msgPair.type); } }
public void sendMsgToServer(byte[] bytes, Fleck.IWebSocketConnection clientSock, GlobalMessage msgType) { Socket value = null; if (msgType.Equals(GlobalMessage.PACKETERROR)) { closeClient(clientSock); return; } else if (msgType == GlobalMessage.LOGIN) { ClientTerminal c = new ClientTerminal(); c.Connected += new TCPTerminal_ConnectDel(ServerConnected); c.MessageRecived += new TCPTerminal_MessageRecivedDel(ServerMessageRecived); c.Disconncted += new TCPTerminal_DisconnectDel(ServerConnectionDroped); //clientTerminal = c; createSocket(c); value = c.m_socClient; toServer.Add(value, c); myGlobals.ClientServer.Add(clientSock, value); myGlobals.ServerClient.Add(value, clientSock); connect2Server(c); } else { value = myGlobals.ClientServer[clientSock]; } //if (clientMsgProcess.messageType == clientMsgType.KEEPALIVEACK) // clientHeartbeats[key].keepalive(); toServer[value].SendMessage(bytes); }
string createConfRoom(string msg, Fleck.IWebSocketConnection clientSock) { string others = TextFollowing(msg, "OTHERS:"); string operatorName = TextFollowing(msg, "OPERATORNAME:"); string localRoomId = TextFollowing(msg, "LOCALCONFROOMID:"); string operatorNum = TextFollowing(msg, "OPERATORNUMBER:"); string serverRoomId = ""; string type = "SIP"; Numbers tmpNumbers = processNumbers(others, type); RoomRecord room = new RoomRecord(); room.operatorNum = operatorNum; if (tmpNumbers == null) { room.sipNumbers.Add(operatorNum); myGlobals.myRooms.rooms.Add(operatorNum, room); return(msg); } PlanRecord plan = new PlanRecord(); plan.pocNumbers = tmpNumbers.pocNumbers; plan.operatorNum = operatorNum; int flag = 0; foreach (var kv in tmpNumbers.pocNumbers) { if (!myGlobals.gatewayData.gateway[kv.Key].isOccupied) { myGlobals.gatewayData.gateway[kv.Key].isOccupied = true; tmpNumbers.sipNumbers.Add(myGlobals.gatewayData.gateway[kv.Key].sipNo); flag = 1; } } if (flag == 1) { myGlobals.myPlans.plans.Add(operatorNum, plan); } string sipNumbers = string.Join(";", tmpNumbers.sipNumbers.ToArray()); msg = msg.Replace(others, sipNumbers); room.sipNumbers = tmpNumbers.sipNumbers; room.sipNumbers.Add(operatorNum); myGlobals.pocSendDeal.addMember(operatorName, localRoomId, serverRoomId, tmpNumbers.pocNumbers); myGlobals.myRooms.rooms.Add(operatorNum, room); return(msg); }
string kickConfMember(string msg, Fleck.IWebSocketConnection clientSock) { string others = TextFollowing(msg, "NUMBER:"); string operatorName = TextFollowing(msg, "OPERATORNAME:"); string serverRoomId = TextFollowing(msg, "SERVERROOMID:"); string localRoomId = TextFollowing(msg, "LOCALCONFROOMID:"); //string type = TextFollowing(msg, "TYPE:"); string type = "SIP"; Numbers tmpNumbers = processNumbers(others, type); string sipNumbers = string.Join(";", tmpNumbers.sipNumbers.ToArray()); msg = msg.Replace(others, sipNumbers); myGlobals.pocSendDeal.deleteMember(operatorName, localRoomId, serverRoomId, tmpNumbers.pocNumbers); if (tmpNumbers.sipNumbers.Count == 0) { return(null); } string operatorNum = myGlobals.myRooms.getOperatorNum(serverRoomId); foreach (var value in tmpNumbers.sipNumbers) { myGlobals.myRooms.rooms[operatorNum].sipNumbers.Remove(value); } return(msg); }
public void ServerConnectionDroped(Socket serverSock) { if (InvokeRequired) { BeginInvoke(new TCPTerminal_DisconnectDel(ServerConnectionDroped), serverSock); return; } // long l = socket.Handle.ToInt64(); //if (serverHeartbeats.ContainsKey(l)) // serverHeartbeats.Remove(l); cmdConnect2.Enabled = true; cmdClose2.Enabled = false; if (serverTimers.ContainsKey(serverSock)) { serverTimers.Remove(serverSock); } Fleck.IWebSocketConnection clientSock = myGlobals.ServerClient[serverSock]; closeServer(serverSock); closeClient(clientSock); PublishMessage(logBox2, "Server has been disconnected!"); }
public void sendMsgToClient(string msg, Socket serverSock, GlobalMessage msgType) { Fleck.IWebSocketConnection clientSock = myGlobals.ServerClient[serverSock]; //long sock = clientSock.Handle.ToInt64(); if (msgType == GlobalMessage.LOGINACKFAILED) { //toClient.DistributeMessage(bytes, clientSock); wsServer.sendMessage(clientSock, msg); closeServer(serverSock); closeClient(clientSock); } else if (msgType.Equals(GlobalMessage.LOGINACKOK)) { //Heartbeat cTimer = new Heartbeat(); //cTimer.timeout += new Heartbeat.timerDelegate(clientTimeout); clientHeartbeat cTimer = new clientHeartbeat(); cTimer.timeout += new clientHeartbeat.timerDelegate(clientTimeout); cTimer.start(); clientTimers.Add(clientSock, cTimer); //toClient.DistributeMessage(bytes, clientSock); wsServer.sendMessage(clientSock, msg); } else if (msgType == GlobalMessage.LOGOUTACKOK) { //toClient.DistributeMessage(bytes, clientSock); wsServer.sendMessage(clientSock, msg); closeServer(serverSock); closeClient(clientSock); } else { //toClient.DistributeMessage(bytes, clientSock); wsServer.sendMessage(clientSock, msg); } }
//private void closeTerminal(Socket clientSock) //{ // //toClient.MessageRecived -= new TCPTerminal_MessageRecivedDel(ClientMessageRecived); // //toClient.ClientConnect -= new TCPTerminal_ConnectDel(ClientConnected); // //toClient.ClientDisconnect -= new TCPTerminal_DisconnectDel(ClientDisConnected); // toClient.Close(clientSock); //} public void serverTimeout(Socket serverSock) { //toServer[value].Close(); // serverHeartbeats.Remove(value); closeServer(serverSock); Fleck.IWebSocketConnection clientSock = myGlobals.ServerClient[serverSock]; closeClient(clientSock); }
public static WebSocketConnectionInfo CreateConnectionInfo(FleckImpl.IWebSocketConnection socket) { return(new WebSocketConnectionInfo( $"{socket.ConnectionInfo.ClientIpAddress}:{socket.ConnectionInfo.ClientPort}", socket.ConnectionInfo.Path, socket.ConnectionInfo.Headers, socket.ConnectionInfo.Cookies)); }
public void clientTimeout(Fleck.IWebSocketConnection clientSock) { // closeTerminal(key); // clientHeartbeats.Remove(key); closeClient(clientSock); Socket serverSock = myGlobals.ClientServer[clientSock]; closeServer(serverSock); }
public FleckWebSocketConnection(FleckImpl.IWebSocketConnection socket) { this._socket = socket ?? throw new ArgumentNullException(nameof(socket)); socket.OnMessage = message => this.OnMessage?.Invoke(message); socket.OnBinary = data => this.OnMessage?.Invoke(data.DecodeToString()); socket.OnError = ex => this.OnError?.Invoke(ex); socket.OnClose = () => this.OnClose?.Invoke(); }
public void sendMsgToClient2(string msg, Fleck.IWebSocketConnection clientSock, GlobalMessage msgType) { long sock = clientSock.GetHashCode(); //toClient.DistributeMessage(bytes, clientSock); wsServer.sendMessage(clientSock, msg); PublishMessage(logBox1, string.Format("Client {0}(socket:{1}) has been disconnected!", clientSock.ConnectionInfo, sock)); // toClient.Close(clientSock); wsServer.allSockets.Remove(clientSock); }
void ClientConnected(Fleck.IWebSocketConnection socket) { long sock = socket.GetHashCode(); PublishMessage(logBox1, string.Format("Client {0}(socket:{1}) has been connected!", socket.ConnectionInfo, sock)); //long key = socket.Handle.ToInt64(); //Heartbeat clientTimer = new Heartbeat(); //clientTimer.timeout += new Heartbeat.timerDelegate(clientTimeout); // clientHeartbeats.Add(key, clientTimer); }
public string getOperatorName(Fleck.IWebSocketConnection s) { foreach (var item in operators) { if (item.Value.sock == s) { return(item.Key); } } return(null); }
public void clientPubMessage(string msg, Fleck.IWebSocketConnection clientSock, GlobalMessage msgType) { if (msgType.Equals(GlobalMessage.KEEPALIVEACK)) { clientTimers[clientSock].keepalive(); PublishMessage(keepalive1, msg); } else { PublishMessage(messageBox1, msg); } }
private void OnClientConnected(Fleck.IWebSocketConnection context) { if (WebSocketConnected != null) { var socket = new FleckWebSocket(context); WebSocketConnected(this, new WebSocketConnectEventArgs { WebSocket = socket, Endpoint = context.ConnectionInfo.ClientIpAddress + ":" + context.ConnectionInfo.ClientPort }); } }
string addMemberNotify(string msg, Fleck.IWebSocketConnection clientSock) { string number = TextFollowing(msg, "NUMBER:"); string type = TextFollowing(msg, "TYPE:"); USER_INFO userInfo = new USER_INFO(); userInfo.name = number; userInfo.phone = number; userInfo.type = type; myGlobals.dbManager.AddUser(userInfo); return(msg); }
private void FleckServiceConfig(FleckImpl.IWebSocketConnection socket) { // Throw an exception if the "OnOpen" method has not been defined, so that clients cannot connect without validation socket.OnOpen = () => { // Since delegates are immutable, assign the delegate to a variable to make sure that the value doesn't change // in the middle of the function (i.e. ensure thread-safety and avoid locking) var onOpenFunc = this.OnOpen; if (onOpenFunc == null) { throw new NullReferenceException($"The {nameof(OnOpen)}() callback must be set in order to accept connections"); } onOpenFunc(new FleckWebSocketConnection(socket), FleckWebSocketConnection.CreateConnectionInfo(socket)); }; }
MsgPair dispatch(string msg, Fleck.IWebSocketConnection clientSock) { int separateIndex = msg.IndexOf("\r\n"); if (separateIndex != -1) { string msgHead = msg.Substring(0, separateIndex); int index = msgIndex[msgHead]; ClientMsgType msgType = (ClientMsgType)index; GlobalMessage globalMsg; if (msgType.Equals(ClientMsgType.LOGIN)) { globalMsg = GlobalMessage.LOGIN; } else if (msgType.Equals(ClientMsgType.LOGOUT)) { globalMsg = GlobalMessage.LOGOUT; } else if (msgType.Equals(ClientMsgType.KEEPALIVEACK)) { globalMsg = GlobalMessage.KEEPALIVEACK; } else { globalMsg = GlobalMessage.DATA; } clientPublishMessage(msg, clientSock, globalMsg); string newMsg = ClientMsgDelegate[index](msg, clientSock); if (newMsg == null) { return(null); } byte[] buffer = addHead(newMsg); MsgPair msgPair = new MsgPair(buffer, globalMsg); return(msgPair); } else { return(null); } }
string addConfMember(string msg, Fleck.IWebSocketConnection clientSock) { string others = TextFollowing(msg, "OTHERS:"); string operatorName = TextFollowing(msg, "OPERATORNAME:"); string serverRoomId = TextFollowing(msg, "SERVERROOMID:"); string localRoomId = TextFollowing(msg, "LOCALCONFROOMID:"); string type = TextFollowing(msg, "SPTYPE:"); Numbers tmpNumbers = processNumbers(others, type); if (tmpNumbers == null) { return(null); } foreach (var kv in tmpNumbers.pocNumbers) { if (myGlobals.gatewayData.gateway[kv.Key].serverRoomId == serverRoomId) { } else if (!myGlobals.gatewayData.gateway[kv.Key].isOccupied) { myGlobals.gatewayData.gateway[kv.Key].isOccupied = true; tmpNumbers.sipNumbers.Add(myGlobals.gatewayData.gateway[kv.Key].sipNo); } } string sipNumbers = string.Join(";", tmpNumbers.sipNumbers.ToArray()); msg = msg.Replace(others, sipNumbers); myGlobals.pocSendDeal.addMember(operatorName, localRoomId, serverRoomId, tmpNumbers.pocNumbers); if (tmpNumbers.sipNumbers.Count == 0) { return(null); } string operatorNum = myGlobals.myRooms.getOperatorNum(serverRoomId); foreach (var value in tmpNumbers.sipNumbers) { myGlobals.myRooms.rooms[operatorNum].sipNumbers.Add(value); } return(msg); }
///--------------------------------------------------------------------------------- /// Server ///--------------------------------------------------------------------------------- public void closeServer(Socket serverSock) { //if (!myGlobals.ServerClient.ContainsKey(serverSock)) // return Fleck.IWebSocketConnection clientSock = null; if (myGlobals.ServerClient.ContainsKey(serverSock)) { clientSock = myGlobals.ServerClient[serverSock]; } if (toServer.ContainsKey(serverSock)) { toServer[serverSock].Close(); toServer.Remove(serverSock); } if (myGlobals.ClientServer.ContainsKey(clientSock)) { myGlobals.ClientServer.Remove(clientSock); } if (myGlobals.ServerClient.ContainsKey(serverSock)) { myGlobals.ServerClient.Remove(serverSock); } string operatorName = myGlobals.operatorData.getOperatorName(clientSock); if (myGlobals.operatorData.operators.ContainsKey(operatorName)) { myGlobals.operatorData.Remove(operatorName); } if (toServer.ContainsKey(serverSock)) { toServer.Remove(serverSock); } if (serverTimers.ContainsKey(serverSock)) { serverTimers[serverSock].stop(); serverTimers.Remove(serverSock); } // long sock = serverSock.Handle.ToInt64(); PublishMessage(logBox2, string.Format("Server has been disconnected!")); }
string stopConfRoom(string msg, Fleck.IWebSocketConnection clientSock) { string others = TextFollowing(msg, "OTHERS:"); string operatorName = TextFollowing(msg, "OPERATORNAME:"); string serverRoomId = TextFollowing(msg, "SERVERROOMID:"); string localRoomId = TextFollowing(msg, "LOCALCONFROOMID:"); string type = "SIP"; Numbers tmpNumbers = processNumbers(others, type); // string sipNumbers = string.Join(";", tmpNumbers.sipNumbers.ToArray()); //foreach (var kv in tmpNumbers.pocNumbers) //{ // sipNumbers += ";" + myGlobals.gatewayData.gateway[kv.Key].sipNo; //} //foreach (var kv in myGlobals.gatewayData.gateway) //{ // if (kv.Value.serverRoomId == serverRoomId) // sipNumbers += ";" + kv.Value.sipNo; //} //msg = msg.Replace(others, sipNumbers); myGlobals.pocSendDeal.deleteMember(operatorName, localRoomId, serverRoomId, tmpNumbers.pocNumbers); string operatorNum = myGlobals.myRooms.getOperatorNum(serverRoomId); List <string> sipNumbers = myGlobals.myRooms.rooms[operatorNum].sipNumbers; if (sipNumbers.Count == 0) { return(null); } string sipNumbersStr = string.Join(";", sipNumbers.ToArray()); msg = msg.Replace(others, sipNumbersStr); return(msg); }
void ClientDisConnected(Fleck.IWebSocketConnection socket) { //Heartbeat heartbeat = new Heartbeat(key); // heartbeats.Add(key, heartbeat); //long key = socket.Handle.ToInt64(); //if (clientHeartbeats.ContainsKey(key)) // clientHeartbeats.Remove(key); long sock = socket.GetHashCode(); if (myGlobals.ClientServer.ContainsKey(socket)) { Socket serverSock = myGlobals.ClientServer[socket]; //PublishMessage(logBox1, string.Format("Client {0}(socket:{1}) has been disconnected!", socket.ConnectionInfo, sock)); closeClient(socket); closeServer(serverSock); } else { // PublishMessage(logBox1, string.Format("Client {0}(socket:{1}) has been disconnected!", socket.ConnectionInfo, sock)); closeClient(socket); } }
string login(string msg, Fleck.IWebSocketConnection clientSock) { string operatorName = TextFollowing(msg, "OPERATORNAME:"); //myGlobals.clientSock_operators.Add(clientSock, operatorName); //myGlobals.operators_clientSock.Add(operatorName, clientSock); if (!myGlobals.operatorData.operators.ContainsKey(operatorName)) { myGlobals.operatorData.addOpeartor(operatorName, clientSock); } else { string msg2Client = "LOGINACK\r\n" + "STATUS:FAILED\r\n" + "REASIONCODE:4\r\n"; //byte[] bytes = addHead(msg2Client); string flagStr = "-1-2-1-2-1-2-1-2"; string total = flagStr + msg2Client; sendMsgToClient(total, clientSock, GlobalMessage.DATA); } return(msg); }
string setConfHostVideo(string msg, Fleck.IWebSocketConnection clientSock) { return(msg); }
void ClientMessageRecived(Fleck.IWebSocketConnection socket, string msg) { // long key = socket.Handle.ToInt64(); //analysisClient(buffer, key); clientMsgProcess.analyse(msg, socket); }
string unSetConfBroadcast(string msg, Fleck.IWebSocketConnection clientSock) { return(msg); }
string switchConfRoom(string msg, Fleck.IWebSocketConnection clientSock) { return(msg); }
public void delAckDeal(string msg) { string serverRoomId = TextFollowing(msg, "SERVERROOMID:"); string localRoomId = TextFollowing(msg, "LOCALCONFROOMID:"); string type = TextFollowing(msg, "TYPE:"); string number = TextFollowing(msg, "NUMBER:"); string status = TextFollowing(msg, "STATUS:"); string operatorName = TextFollowing(msg, "OPERATORNAME:"); Fleck.IWebSocketConnection clientSock = myGlobals.operatorData.getOperatorSock(operatorName); Socket serverSock = myGlobals.ClientServer[clientSock]; //foreach (var kv in myGlobals.myPlans.plans.Values) //{ // if (kv.Contains(number)) // serverRoomId = kv.serverRoomId; //} if (status == "OK") { USER_INFO oldUser = new USER_INFO(); USER_INFO newUser = new USER_INFO(); oldUser.phone = number; newUser.localRoomId = "0"; newUser.serverRoomId = "0"; myGlobals.dbManager.UpdateUser(newUser, oldUser); string msg2Client = "QUITCONFROOM\r\n" + "ISOPERATOR:0\r\n" + "OPERATORNAME:" + operatorName + "\r\n" + "LOCALCONFROOMID:" + localRoomId + "\r\n" + "SERVERROOMID:" + serverRoomId + "\r\n" + "NUMBER:" + number + "\r\n"; // byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg2Client); // byte[] bytes = addHead(msg2Client); string flagStr = "-1-2-1-2-1-2-1-2"; string total = flagStr + msg2Client; //ServerUpdateMessage(bytes, serverSock, 2); sendMsgToClient(total, serverSock, GlobalMessage.ALIYUNDATA); if (myGlobals.gatewayData.gateway[type].isConnnected == true) { USER_INFO tmpUserInfo = new USER_INFO(); tmpUserInfo.type = type; tmpUserInfo.localRoomId = localRoomId; tmpUserInfo.serverRoomId = serverRoomId; USER_INFO[] userRecords = myGlobals.dbManager.GetUser(tmpUserInfo); if (userRecords.Length == 0) { string sipNum = myGlobals.gatewayData.getNumber(type); string msg2Server = "KICKCONFMEMBER\r\n" + "OPERATORNAME:" + operatorName + "\r\n" + "LOCALCONFROOMID:" + localRoomId + "\r\n" + "SERVERROOMID:" + serverRoomId + "\r\n" + "NUMBER:" + sipNum + "\r\n"; // byte[] byteMessage = System.Text.Encoding.UTF8.GetBytes(msg2Server); byte[] buffer = addHead(msg2Server); sendMsgToServer(buffer, clientSock, GlobalMessage.ALIYUNDATA); } } } }
public void addAckDeal(string msg) { string serverRoomId = TextFollowing(msg, "SERVERROOMID:"); string localRoomId = TextFollowing(msg, "LOCALCONFROOMID:"); string type = TextFollowing(msg, "TYPE:"); string number = TextFollowing(msg, "NUMBER:"); string status = TextFollowing(msg, "STATUS:"); string operatorName = TextFollowing(msg, "OPERATORNAME:"); Fleck.IWebSocketConnection clientSock = myGlobals.operatorData.getOperatorSock(operatorName); Socket serverSock = myGlobals.ClientServer[clientSock]; foreach (var kv in myGlobals.myPlans.plans.Values) { if (kv.Contains(number)) { serverRoomId = kv.serverRoomId; } } if (status == "OK") { myGlobals.mre2.WaitOne(); myGlobals.mre1.Reset(); // if (myGlobals.gatewaySip.active[type] == "1") if (myGlobals.gatewayData.gateway[type].isConnnected) { string msg2Client = "MEMBERCONNECTED\r\n" + "NUMBER:" + number + "\r\n" + "ISOPERATOR:0\r\n" + "OPERATORNAME:" + operatorName + "\r\n" + "LOCALCONFROOMID:" + localRoomId + "\r\n" + "SERVERROOMID:" + serverRoomId + "\r\n" + "ANSWERTIME:\r\n" + "ENABLEVIDEO:NO\r\n"; //byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg2Client); // byte[] bytes = addHead(msg2Client); //ServerUpdateMessage(bytes, serverSock, 2); string flagStr = "-1-2-1-2-1-2-1-2"; string total = flagStr + msg2Client; sendMsgToClient(total, serverSock, GlobalMessage.ALIYUNDATA); } else { } USER_INFO oldUser = new USER_INFO(); oldUser.phone = number; USER_INFO newUser = new USER_INFO(); newUser.localRoomId = localRoomId; newUser.serverRoomId = serverRoomId; myGlobals.dbManager.UpdateUser(newUser, oldUser); myGlobals.mre1.Set(); } else if (status == "FAILED") { //long l = myGlobals.ServerClient[sock]; // string operatorName = myGlobals.operators[l]; string msg2Client = "MEMBERCALLFAILED\r\n" + "CONFTYPE:0\r\n" + "OPERATORNAME:" + operatorName + "\r\n" + "ISOPERATOR:0\r\n" + "NUMBER:" + number + "\r\n" + "LOCALCONFROOMID:" + localRoomId + "\r\n" + "SERVERROOMID:" + serverRoomId + "\r\n" + "REASIONCODE:602\r\n"; //byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg2Client); //byte[] bytes = addHead(msg2Client); string flagStr = "-1-2-1-2-1-2-1-2"; string total = flagStr + msg2Client; sendMsgToClient(total, serverSock, GlobalMessage.ALIYUNDATA); // ServerUpdateMessage(bytes, serverSock, 2); } }
string restartConfModel(string msg, Fleck.IWebSocketConnection clientSock) { return(msg); }