Пример #1
0
func giveCoupledSockets(id1, id2 uint64) (*mexsocket.MexSocket, *mexsocket.MexSocket) {

	conn1, err := net.Dial("tcp", addr+":"+strconv.Itoa(port))
	conn2 := <-newConn

	if err != nil || conn2 == nil {
		return nil, nil
	}

	s1 := mexsocket.New(id1, conn1)
	s2 := mexsocket.New(id2, conn2)

	return s1, s2
}
Пример #2
0
//start the mock server. It gets a tcp connection
func (server *MockServer) Run(port int, autoReadRoutine bool) {

	ln, err := net.Listen("tcp", ":"+strconv.Itoa(port))
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	log.Println("Mock server running on port", port)

	server.listener = ln

	go func() {
		for {
			select {
			case <-server.quit:
				server.quitDone <- true
				return
			default:
				conn, err := ln.Accept()
				if err != nil {
					fmt.Println(err)
					continue
				}
				s := mexsocket.New(server.nextId, conn)
				server.sockets[server.nextId] = s

				//notify that a new client connected
				server.Clichan <- server.nextId

				if autoReadRoutine {
					go server.newConnection(server.nextId, s)
				}

				server.nextId++
			}
		}
	}()
}
Пример #3
0
func (c *Client) Connect(address string, port int) error {

	//already connected or pending connection
	if c.socket != nil {
		return errors.New("client connection already open")
	}

	//dial the connection to the server
	conn, err := net.Dial("tcp", address+":"+strconv.Itoa(port))
	if err != nil {
		return err
	}

	//enable connection on client
	c.socket = mexsocket.New(0, conn)

	go c.handleConnection()

	idMex := message.NewRequest(message.Identity)
	_, err = c.socket.Send(idMex)
	return err
}
Пример #4
0
func (hub *Hub) handleConnection(conn net.Conn) {

	//get an id from pool
	id := hub.idPool.GetId()

	//create a new socket
	s := mexsocket.New(id, conn)

	//enable socket service goroutines
	go s.StartReadService(mexsocket.ModeServer)
	go s.StartWriteService()

	//add socket to map
	hub.socketMap.Set(id, s)

	//add id to Set
	hub.idSet.Add(id)

	for {
		select {

		//received a request to process
		case mex, ok := <-s.Incoming():
			if ok {
				go hub.processRequest(s, mex.(*message.Request))
			}

		//client is closing. Terminate loop
		case <-s.QuitChan():

			//remove client info from structures
			hub.socketMap.Remove(id)
			hub.idSet.Remove(id)
			return
		}
	}
}